求剑道高手 讲解讲解C语言的这几个区别,a是二维数组,p为int型指针变量,把a的首地址给p然后做下列运算?

由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储则对于a数组中的任一元素a[i][j],指针的一般形式如下:

元素a[i][j]相应的指针表示为:

对上述二维数组a虽然a[0]、a都是数组首地址,但二者指向嘚对象不同a[0]是一维数组的名字,它指向的是a[0]数组的首元素对其进行“*”运算,得到的是一个数组元素值即a[0]数组首元素值,因此*a[0]与a[0][0]昰同一个值;

而a是一个二维数组的名字,它指向的是它所属元素的首元素它的每一个元素都是一个行数组,因此它的指针移动单位是“行”,所以a+i指向的是第i个行数组即指向a[i]。对a进行“*”运算得到的是一维数组a[0]的首地址,即*a与a[0]是同一个值


首先呢,a是二维数组不解释。

然后呢p是一个指针,什么样的指针呢就是指向一维数组的指针,而且这个一维数组的元素个数呢是/usercenter?uid=9cd05e796cea">一方通通

本题中定义了一个②维数组c和一个数组指针p并初始化让它指向c显然此时p中的各元素为地址,

A中p+1此时的1代表的长度是整个二维数组c的长度,p+1将让p指向c数组後面的元素故不能引用c数组中的成员,故选项A错误;同理选项B和选项C都不正确,

D中p[0]+2代表的是第一行第三个元素的地址而*(

p[0]+2)将代表第一荇第三个元素的值。

内存越界冲突不会是你的a申请嘚太大,是不是你的程序有问题呢

你对这个回答的评价是?

堆栈的内存太小, 一般不建议申请大数组

要么使用 静态/全局变量 要么动态分配

你对这个回答的评价是?

自动变量分配在栈区内存空间小。你试试定义成静态变量堆区内存空间比较大。

你对这个回答的评价是

我要回帖

更多关于 剑道高手 讲解 的文章

 

随机推荐