ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

【c++】c语言入门到c++使用高手: c语言入门之指针(六)

【c++】c语言入门到c++使用高手: c语言入门之指针(六) 第九章 指针第六节 数组的指针和指向数组指针的指针变量-31. 回顾二维数组和多维数组的概念a[3][4]二维数组a[7][8][9], 三维数组, 排列方式a[0][0][0]…a[0][0][9], a[0][1][0]…最右侧维度变化最快,最左侧变化最慢多维数组以此类推…2. 指向多维数组的指针和指针变量的探究#includeiostreamintmain(){//可以把a看成是一个一维数组,这一个一维数组有三个元素, a[0], a[1], a[2]// 每个元素又是一个包含4个元素的一维数组//数组名a,同样代表数组首地址, 假设a[0]的地址在1000, a[1]的地址是1016, a[2]的地址是1032inta[3][4];int*p;p(int*)a;//强制类型转换p(int*)(a1);// 代表第一行首地址,每行有四个元素,每个元素占4个字节,a1要跳过16个字节// a[0], a[1], a[2]就是个一维数组名,c语言规定数组名代表数组的首地址//也就是说a[0] a[0][0]pa[0];pa[1];// 第0行第一列元素首地址pa[0][1];//也可以使用p a[0]1;return0;}一些推论(假设数组首地址为1000)a[0] 等价于 *a, 都是数组首地址, 则地址为1000a[0]1 等价于 *a1,等价于 a[0][1], 也就是地址为(1004)a[1] 等价于 *(a1), 等价于1016a[1]2 等价于 *(a1)2, 等价于 a[1][2], 地址也就是1024*(a[0]1) 等价于 a[0][1]*(a[1]2) 等价于 a(*(a1)2), 第一行第二列元素值(已哭晕!!)a[i]的性质如果是一维数组的话,是代表值,是占用实际内存的如果是多维数组的话,是代表地址,a[i]和a[i]的地址值是一样的代码演示#includeiostreamintmain(){inta[3][4];inti,j;for(i0;i3;i){for(j0;j4;j){a[i][j]0;}}int*p;p(int*)(a1);//第1行首地址*p56;p;*p88;for(i0;i3;i){for(j0;j4;j){printf(a[%d][%d]: %d ,i,j,a[i][j]);}}return0;}3. 指针数组和数组指针a) 指针数组#includeiostreamintmain(){// 首先这是个数组,数组中有4个元素,每个元素都是个指针,// 所以这相当于定义了4个指针变量// 指针数组int*p[4];//能引用的下标是0-3inta[3][4];inti,j;for(i0;i3;i){for(j0;j4;j){a[i][j]100;printf(a[%d][%d]: %d ,i,j,a[i][j]);}}printf(\n);p[0]a[0][0];p[1]a[0][1];p[2]a[0][2];p[3]a[0][3];for(i0;i4;i){printf(the value of *p[%d]: %d ,i,*(p[i]));}return0;}b) 数组指针不太好理解,使用不是很多实例代码1#includeiostreamintmain(){// 数组指针,注意括号//这是一个指针变量,用来指向10个元素得的一维数组int(*p)[10];inta[10];for(inti0;i10;i){a[i]i;}pa;//要用取地址符,否则编译报错int*q;q(int*)p;for(inti0;i10;i){printf( value: %d,*q);q;}return0;}实例代码2#includeiostreamintmain(){int(*p)[10];inta[3][10];inti,j;for(i0;i3;i){for(intj0;j10;j){a[i][j]ij;}}pa;//二维数组名可以直接赋值给数组指针int*q;q(int*)p;for(i0;i3;i){for(intj0;j10;j){printf( value: %d ,*q);q;}printf(\n***************************\n);p;}return0;}4. 多维数组的指针做函数参数实际应用,建议参考前面的实例
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表