文档详情

[工学]06 第六章 复合数据类型.ppt

发布:2018-03-04约1.29万字共49页下载文档
文本预览下载声明
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete 按引用调用的参数传递方式 将函数作为参数 将数组作为参数 §6.1 变量的地址 变量在内存中占用的存储空间的首地址称为变量的地址 例:int x=0x1234; 则 x 的地址为2000H 变量x以两种方式被使用 左值:变量的地址部分 右值:变量的值部分 例:x = x + 1 左值 右值 如果一表达式的求值结果被指派了一个变量,则该表达式可做左值,否则只能做右值 例:(1) (ij)?i:j 做左值: (ij)?i:j = 10 ; 做右值:k = (ij)?i:j ; (2) i + j 只能做右值:k = i + j ; (i + j) = 1; 根据变量的使用属性,变量分: 值变量:在其存储空间中存放的是该变量的 值,按变量名存取变量值; 地址变量:在其存储空间中存放的是地址, 使用变量名时操作的是变量的地址; 指针类型的变量是最常用的地址变量 §6.2 指针类型与引用类型 一、指针的声明 一般形式: 基类型 *指针变量名; 基类型:是某种数据类型,指定指针变量所指向的对象的数据类型 *:指针定义符 例:int *p; ?int* p;?int * p; 一个指针占用的存储空间的大小取决于机器的内存寻址长度 例: int age = 30; int* age_ptr; 二、指针的使用 两个相关的运算符 取地址运算符:取操作数的存储空间地址 * 指针运算符:用于指针变量,表示取出指针所指向的存储空间中保存的值 例: int age = 30; int* age_ptr; age_ptr = age ; *age_ptr = 50 ; age_ptr ? age *age_ptr ? age *age_ptr = 50 ? age = 50; age++; ? (*age_ptr)++; ? *age_ptr++; ? *(age_ptr++); age: 30-31 ? *age_ptr; age_ptr=age_ptr+1;地址加1 使一指针指向某一变量时,指针的基类型必需与此变量的数据类型一致 int age = 30; int* age_ptr = age; float salary = 725.50; float* salary_ptr = salary; 那么以下赋值运算都是非法的: age_ptr = salary; // 出错,不能将(float*)类型赋值给(int*)类型 age_ptr = salary_ptr;// 出错,不能将(float*)类型赋值给(int*)类型 salary_ptr = age; // 出错,不能将(int*)类型赋值给(float*)类型 salary_ptr = age_ptr;// 出错,不能将(int*)类型赋值给(float*)类型 说明: 空指针NULL 其ASCII码为0 age_ptr = NULL ; (iostream.h string.h) 指针使用前需初始化,使其指向一个明确的对象 例: int *p ; *p = 1; 错误,p没有指向一个明确的对象,则p中存放的是一个不确定的地址,把1写到一个不确定的地方去了 三、指针运算 指针定义中的基类型决定了在指针运算中每次操作的字节数 指针只能做+、-这两种算术运算,而且只能加减整数:假设有一指针p,n是一个整数 p±n后得到的地址:p原来指向的地址± n*sizeof(p的基类型) 四、引用 引用:给对象取一个别名,主要用于三个用途 独立引用 作为参数传递 作为函数返回类型 1、独立引用 一般形式: 基类型 引用名 = 标识符; 为“标识符”所代表的变量声明一个叫“引用名”的别名 例: int i = 5; int j = i ; int k = 10 ; j = k ; 说明 引用变量不另外分配内存空间 独立引用在声明时必须初始化,引用的基类型必须与建立联系的变量类型一致。引用名一旦被声明成一个变量的别名,则不能与其他变量相联系了 一个引用只能指向一个对象,一个对象则可有多个别名 在C++的实现中对独立引用做如下限制: 不允许创建引用数组:数组不能用引用生成一个别名,但数组元素可引用 空类型void不
显示全部
相似文档