C语言指针问题?

chara[][20]={"acde","wefg","wetgdf"};char**p;p=a;这个a是行的地址,也就是a是指向a[i]这一行的指针,a[i]存储的也是... char a[][20]={"acde","wefg","wetgdf"};
char **p;
p=a;
这个a是行的地址,也就是a是指向a[i]这一行的指针,a[i]存储的也是一个地址,指向列,那不就是a是指向指针的指针,为什么不能把a赋值给char **p?
展开
 我来答
以林Code
2020-06-27 · 科普各类科学技术,带大家涨知识。
以林Code
采纳数:35 获赞数:40

向TA提问 私信TA
展开全部
你好,二者并不等价, 首先我们知道,a[i]是指向一个有20个char元素的char数组 而p是指向指针的指针
我们可以来分析啊 当你 p=a 时, p即a[0] [0] 的地址 此时你*p 即为取出a[0] [0] 的内容即为'a', 而当你 **p 的时候 就出错了, 这时候你就是在对 ‘a’ 这个字符取地址,这时候就会出现内存异常错误,你肯定是不能对97取地址。你可以强制转换赋值然后自己试一下 即可
p = (char **)a;
更多追问追答
追问
可否这样理解,char a[][i]的a是指向一个行,这个行下面还有好多个元素,char**p是一个元素的地址
追答
其实你对地址不了解 所谓的二维数组 在内存里也是线性的 a[0] 和 a[0][0] 的地址是同一个  而不管他是什么 指针的*就是取出地址里的内容  你只要理解为指针指向的地址 取出来的内容就是字符串a 而你二级指针再对a取内容就错了 因为a只是一个字符并不是地址
水里风
2020-06-27 · TA获得超过1528个赞
知道小有建树答主
回答量:1294
采纳率:80%
帮助的人:504万
展开全部
数组名可以看作指针,但是和指针又是有区别的,网上有很多例子,本身将数组名赋值给指针也是做了隐式的转换。编译报错已经说明了原因,cannot convert ‘char [3][20]’ to ‘char**’,编译器认为两种指针的类型不同,所以无法赋值。对于二维数组应该定义指向数组的指针来使用char (*p)[20],多维数组同理,可以当做是语法规定
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
盛逸帆0s
2020-06-27
知道答主
回答量:4
采纳率:0%
帮助的人:2195
展开全部
公司额u额u五我IEUR就金额居然就三级濡染有呀让他估计他忽然呵呵哈手机额吉手机忘记
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式