文档详情

4章数组与指针.ppt

发布:2017-03-23约3.51千字共29页下载文档
文本预览下载声明
第4章 数组与指针 主要内容 指针与数组 指针与字符串 动态内存分配 引用变量 三、指针与数组 指针与一维数组 指针与二维数组 字符指针与字符串 ?数组的地址(首地址) 2、指针与二维数组 指针变量指向二维数组中的某个一维数组 指针变量取得二维数组首地址的方法 指针变量 = 二维数组名 指针变量 = 二维数组名[0][0] 指针变量 = 二维数组名[0] 指针变量 = 二维数组名[0] 数组名: 指向数组首元素的指针 指向二维数组中某个元素的指针 访问二维数组元素的方式 二维数组a[M][N]中下标为i, j的元素: 【例】用指针变量输出二维数组 等价程序: 几个需搞清楚的概念 指针常量 类型名* const 指针名 = 变量名; 常量指针 const 类型名 * 指针名; int x = 10, y = 20; const int z = 30; const int * px = x; px = y; //正确 *px = 40; //错误 y = 40; //正确 px = z; //正确 z = 40; //错误 常量指针常量 int x = 10, y = 20; const int * const px = x; px = y; //错误 *px = 40; //错误 x = 40; //正确 四、动态存储分配 内存分配 静态分配——程序编译阶段分配存储空间。 动态分配——程序运行阶段分配存储空间。 静态分配和动态分配在内存中的不同的存储区进行。 格式举例: 使用动态存储空间 2、delete操作符 将new运算符动态分配的存储空间重新归还给系统,若没有使用这种运算归还,则只有等到整个程序运行结束才被系统自动回收。 格式举例: 四、引用变量 类型关键字 引用变量名 =已定义的同类型变量; 引用与函数 ios operator=(const ios); * * 指针与引用 ?数组中各元素的地址 数组名——代表数组的首地址 一维数组a[N]中,下标为 i 的元素的地址为:a + i * sizeof ( DataType ) 二维数组a[M][N]中,下标为i, j的元素的地址为: a + ( i * N+j ) * sizeof ( DataType ) 第一个元素的地址——数组的首地址 p1 p2 指针变量指向二维数组中的某个元素 ? 指针p1, p2 的类型 ? int a[3][4]={ { … }, { … }, { … } } ; p1 = a; int (* ) [4] int (*p1) [4] = a[0]; p1++; 二维数组名 a 一维数组名 a[ i ] int * p2 = a[ 1 ] ; p2[2] = p2[0]+10 ; p2++; p1 p2 指针变量=数组名[下标1][下标2] int * p3 = a [ 0 ][ 0 ] ; p3++ ; int * q = a [ 2 ][ 3 ] ; q++ ; (*(a+ i ) )[ j ] *(a[ i ]+j) *(*( a+i )+j ) a[ i ][ j ] 一维数组的第i+1个元素a[ i ]为*( a+i ); 二维数组的第i+1行即a[ i ], 是一个一维数组,其第j+1个元素为*( a[ i ]+j )。 a a[0] … { a[ i ] … } { a[0][0] … a[0][ j ] … } { a[ i ][0] … a[ i ][ j ] … } … … … … int main( ){ int a[3][6]={{1,2,3,4,5,6}, {7,8,9,10,11,12},{13,14,15,16,17,18}}; int * ptr, i, j; ptr=a[0][0] ; //或 ptr = *a; 而不能ptr = a; for(i=0;i18;i++) cout*(ptr+i)\t; coutendl; int (* ptr1)[6]; //ptr1是指向含6个整型元素的一维数组的指针 ptr1=a; for(i=0;i3;i++){ for(j=0;j6;j++) cout*(*(ptr1+i)+j)\t; coutendl; } return 0;} int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int i, j; int (* p1)[4] = a; int *p2; for( i=0; i3;
显示全部
相似文档