尹其畅类与对象(3)_10数组指针new-delete的使用.ppt

尹其畅类与对象(3)_10数组指针new-delete的使用.ppt

第六讲 数组、指针、new与delete 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete 按引用调用的参数传递方式 将函数作为参数 将数组作为参数 §1 变量的地址 变量在内存中占用的存储空间的首地址称为变量的地址 例:int x=0 则 x 的地址为2000H 变量x以两种方式被使用 左值:变量的地址部分 右值:变量的值部分 例:x = x + 1 左值 右值 根据变量的使用属性,变量分: 值变量:在其存储空间中存放的是该变量的值,按变量名存取变量值; 地址变量:在其存储空间中存放的是地址,使用变量名时操作的是变量的地址; 指针类型的变量是最常用的地址变量 §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++); 使一指针指向某一变量时,指针的基类型必需与此变量的数据类型一致 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 ; 指针使用前需初始化,使其指向一个明确的对象 例: int *p ; *p = 1; 错误,p没有指向一个明确的对象,则p中存放的是一个不确定的地址,把1写到一个不确定的地方去了 三、指针运算 指针定义中的基类型决定了在指针运算中每次操作的字节数 指针只能做+、-这两种算术运算,而且只能加减整数:假设有一指针p,n是一个整数 p±n后得到的地址:p原来指向的地址± n*sizeof(p的基类型) §3 数组类型 数组:是一组具有相同名字,不同下标的数据的有序集合 数组中每一个数据称为数组元素 一、一维数组的声明 一般形式: 数组元素类型 数组名[常量表达式]; 常量表达式表示数组长度,即数组元素的个数,只能是整数常量,不能包含任何变量 例: int n; cinn; int a[n]; 错误,不能这样用 数组经定义后,系统为它分配一段连续的存储空间,在此空间内,数组元素依次连续存放。 存储空间大小=常量表达式的值*sizeof(数组元素类型) 例:int a[5]; 共分配 5*sizeof(int) = 10个字节的存储空间 2000H 数组名表示该数组的第一个元素 的首地址 a ? a[0] ? 2000H 数组名是地址常量,而非地址变量 不可修改 数组的连续定义 int a[10], b[50]; 二、一维数组的使用与初始化 1、使用 数组不能以整体形式参加数据处理,只能逐个使用数组元素:数组名[下标] C++中,数组下标由0开始 例:int a[10];表示数组a有10个元素,分别是a[0]……a[9] 2、初始化 给所有元素赋初值 int a[10] = { 10,11,12,13,14,15,16,17,18,19}; // 则a[0]的值为10,a[9]的值为19 此时,可以在声明时省略数

文档评论(0)

1亿VIP精品文档

相关文档