C语言二维数组问题 20

我很纠结啊,二维指针和二级指针是什么概念?还有inta[3][4];int**p;p=a;为什么不合法啊!!!... 我很纠结啊,二维指针和二级指针是什么概念?
还有

int a[3][4];
int **p;
p=a;
为什么不合法啊!!!
展开
 我来答
兔子和小强
2012-08-10 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1430万
展开全部
不理解主要是因为不清楚数组名和指针的区别。二者不是同样地东西。
二维数组是指一段连续的空间,比如int a[3][4]那么a就是一段3*4连续空间的名字而已。
所以sizeof(a)求的是这段空间的大小
而int **p;表明p是一个指针,它指向的是一个指针数组。
sizoef(p)求的是p这个指针(指针其实是个整型)所占空间大小。

数组名做进行值传递时是传数组首地址,所以很多人把数组名跟指针混淆
a == &a;//成立,因为a是一段空间的名字,左边是a的
p == &p;//不成立

从上可以大致知道数组名与指针的区别。
int *p[] = {a[0],a[1],a[2]};//这是个指针数组,里面的元素是指针!!
int **q = q;//合法
int a[3][4];//二维数组
q = a;//不合法
lsslddd
2012-08-10 · TA获得超过936个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:424万
展开全部
你把由四个int组成的一维数组看成一种类型 比如 INT4
那么int a[3][4]就是 INT4 a[3], 那么 a就是INT4类型的地址 ,而p是int*类型的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
混沌鸿门
2012-08-10
知道答主
回答量:6
采纳率:0%
帮助的人:3.2万
展开全部
只存在二级指针和二维数组,哪里有二维指针哦!可能是我没学到吧
*是指向地址符,你定义的int **p 就是定义了一个指针*p;
而p=a中的a 代表的是数组a[][]的首地址!所以不合法
应该是*p=a才是合法的
追问
就是啊,我也纳闷哪里来的二维指针,网上的人告诉我的,要不我赶紧发上来问问,知道了,ok
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hzzyxxx
2012-08-10 · 超过21用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:48.4万
展开全部
谭浩强的书上写得很清楚。翻吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式