
int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int * pa[3]; int * p = *a; int i; for (i=0; i<3; ++i)
3个回答
展开全部
*a不是首个元素,而是首个元素的地址或者也可以看做首行元素的起始地址
注意a是二维数组名,要是a是一维数组名的话,*a才是首个元素的值
我不知道lz学c的时候你的老师有没有这样告诉你,其实二维数组可以看做一个各个元素是一维数组的一维数组
也就是整体上看做一维数组,每个元素仍是一维数组
那么对于一维数组A而言,数组名A可以视作首个元素地址,*A则是首个元素的值
那么同理对于二维数组a,*a不就是大的一维数组的元素,也就是小的一维数组的地址了么
注意a是二维数组名,要是a是一维数组名的话,*a才是首个元素的值
我不知道lz学c的时候你的老师有没有这样告诉你,其实二维数组可以看做一个各个元素是一维数组的一维数组
也就是整体上看做一维数组,每个元素仍是一维数组
那么对于一维数组A而言,数组名A可以视作首个元素地址,*A则是首个元素的值
那么同理对于二维数组a,*a不就是大的一维数组的元素,也就是小的一维数组的地址了么
更多追问追答
追问
*a不就是大的一维数组的元素,也就是小的一维数组的地址了么 这话不懂
追答
我的语言表达可能有点问题,这个东西不好讲,最好自己去悟
总之对于二维数组,*a只是一个指针,**a才是具体的元素
而一维数组*a就是指元素了
类似的三维数组***a才是元素,*a和**a都是指针(但是指向的类型不同)
展开全部
这个建议你去看看二维数组的相关资料,首先a相当于一个二维数组的首地址,*a就相当于一个一维数组的首地址,自然 int *p=*a 可以编译过去。有疑问可以继续追问,欢迎交流。
更多追问追答
追问
*a 为什么会相当于一个因为数组的首地址呢
追答
二维数组在内存中的组织实际上也是线性的,*a相当于数组首行的地址,可以做一个实验(*a)[8]取出来的值和 a[2][2]是相等的,二者也是等效的,推荐一本C primer plus 里面二维数组章节讲的不错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量p是一个指针,存放的是地址,将一个值传递给给指针变量在语法上是没有错误的
追问
*a 不是应该是数组的首个值么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询