knrt.net
当前位置:首页 >> C语言中,行指针指向哪里,为什么(*p)[]方框里是二维数组的列不是行,他不是行指针吗 >>

C语言中,行指针指向哪里,为什么(*p)[]方框里是二维数组的列不是行,他不是行指针吗

(*p)[X]只是说p是指向一个具有X列的一维数组的指针,指针的类型(就是这个一维数组的元素的类型)有待你声明,X的大小也要你写明确,否则p就不可用;p确实是行指针,是指向一行一维数组的,但一个一维数组的长度不是用列数来表示的吗?至于p指向了哪一行,那要由代码给它赋值了才能知道.比如有int a[3][4],(*p)[4],p=a;,那么这时p就指向了第一行(第一下标为0的那一行),p+1就指向了第二行(第一下标为1),p+2就指向了第三行(第一下标为2).若没有赋值(没有写p=a),那么p就只是一个能指向列数为4的(即数组长度为4)int型数组的指针,它这时还是野指针,没有具体指向!

例如:int a[3][4]; int *p[N];int *p[N]是一个指针数组,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素.这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]p[n-1],而且它们分别是指针变量可以用来存放变量地址.但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值.所以:N代表的是行.

c语言中,数组和指针是两类不同的类型前者的定义需要明确被指向的类型,后者的定义需要明确元素类型和数组的长度. 这样定义的原因是两者本身的语义不同.引用一个表示数组的标识符(数组名)具有两重含义,一是指整个数组,二

你说的没错,那个是[m]行,[n]列,但是(*p)已经代表了m来表示行,它是地址不是值!不知道我说的你懂不懂!

可以啊,一维数组的数组名不是地址么,那么同理,对于二维数组,str[][20]的str[i]同样也是指针

二维数组其实就是一维数组 只不过每个元素又是一个数组而已 int a[][] 二维数组 也就是 列的地址是行 行的地址是数组名 比如 int a[10][10] a[1][0] 的地址是 a[1] a[1]的地址是 a int a(*p)[] 一个指针数组 同上 区别是 二维数组的是地址常量不可变 而指针数组的是变量可变,更加灵活 二维数组还有下面的表示方法 int i; 什么 *(*(a+i)+j) *(*(a+i)[j]) *([i]+j) 之类的 为什么可以这样呢 因为z这个括号[]是为了简便程序员的书写发明的 他的本质就是这些表示方式 而 诸如a++ a-- 则是非法的 因为 刚刚说了 因为他是常量

二维数组的数组名a和a+1、a+2是行指针,它指向的元素是一个包含4个元素的一维数组,而*a、*(a+1)、*(a+2)是列指针,即指向元素的指针,相当于一维数组中指向特定元素的指针.*(*(a+1)+2)是先竖着走一行,再横着走两行,相当于a[1][2].&a[1][0]就是a[1][0]的地址,相当于*(a+1),是一个列指针.

行指针其实就是二级指针,也就是说它指向一个一维数组,int a[2][3]; a[0] a[1] 就是行指针 这么看就明白了 int a[][3]={a[0],a[1]} 而a[0] a[1]本身又是一个数组

定义二维指针数组与定义一维指针数组差不多,只是矩阵的维度增加了一维而已. 下面通过具体的实例来说明如何定义一个二维数组 int *p[2][3]; // 定义一个二维数组,只是定义,并没有分配地址空间 int i,j; // 数组的行数和列数 // 下面的2个for

二维数组和指针⑴ 用指针表示二维数组元素.要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题.一个二维数组在计算机中存储时,是按行存储的,即先存储第一行的元素,再存储第二行的元素.当把每一行看作一个整体

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.knrt.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com