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)

既然a是地址,那*a是第一个元素把,那程序中int*p=*a为什么可以通过编译?求详解... 既然a是地址,那*a是第一个元素把,那程序中 int * p =*a为什么可以通过编译?求详解 展开
 我来答
shine1991
科技发烧友

2011-08-19 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.4亿
展开全部
*a不是首个元素,而是首个元素的地址或者也可以看做首行元素的起始地址
注意a是二维数组名,要是a是一维数组名的话,*a才是首个元素的值

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

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式