c语言数组与指针的问题关系请教

char(*b)[4]={"123"};char**c;c=b;printf("%d\n",b[0]);printf("%d\n",c[0]);为什么输出结果不同呢?但是... char (*b)[4]={"123"};
char **c;
c=b;
printf("%d\n",b[0]);
printf("%d\n",c[0]);
为什么输出结果不同呢?
但是
printf("%d\n",b[0]);
printf("%d\n",&c[0]);
却相同
展开
 我来答
可可托海的牧羊人Do
2012-05-19 · TA获得超过303个赞
知道小有建树答主
回答量:209
采纳率:0%
帮助的人:89.3万
展开全部
百度下指针数组 数组指针 指针的指针 你就明白了。
数组指针是定义的一个指针,而指针所指的对象是一个数组,指针指向该数组的首单元的地址,它对数组的内部元素的属性不了解,只是规定了首单元的地址,通过它可以找到该数组。
指针数组指的是一个数组,它其中的所有元素都是指针类型,这里所有指针都指向不同的地址,而所指地址的数据也不一定相同,但是必须属于同一数据类型。
回到这题来:char (*b)[4]这是个指针数组,里面有四个元素 b[0] b[1] b[2] b[3] 它们都是指针
如果是这样写char *c,你就知道c是指针 *c是指针里面的内容 而对于char **c ; *c就是指针 **c是指针里面的内容
所以 b[0] 和c[0]是不一样的(前者是指针 后者木有意义 只是个变量) b[0] 和&c[0]是一样的(都是指向同一地址的指针)
追问
char (*b)[4]不是数组指针吗?b是一个指针,指向一个数组不是这个意思吗?
w_zhangwei_1
2012-05-19 · TA获得超过181个赞
知道答主
回答量:214
采纳率:0%
帮助的人:150万
展开全部
char (*b)[4]是数组指针,指向一个含有4个元素的数组
char **c 是指向字符指针的指针,等价于:char *c[];

这里就要注意优先级了, []的优先级高于*,而()可用来强行优先.
char(*b)[4] 由*b知道这是一个指针,再有[]知道该指针指向的是数组.
char *c[] 由[] 知道这是一个数组,再有char *知道这个数组的内容是指针
两个定义方式明显不一样!

而你这样赋值 c=b ,那么明显是有问题的,你仅仅是将c的每个指针附上了值,并没有对其所指内容赋值,c[0]已经没有任何意义(仅仅是一个指定指向地址的指针变量),因为c[0]分配的地址是由‘1’转换来的(c语言完成),当你用取地址符“&”取c[0]的地址后强转(%d)出来必定和b[0]一致。而b[0]和c[0]从层次关系上来说,必定是不一样的
不知道这样说,你清楚没?
追问
char **c 与char *c[]不是只有在函数的形参表中才等价吗?
一般情况下,前者只是一个二级指针,后者是一个指针数组,我的理解有误吗?
追答
怎么说呢,引入char *c[]只是为了方便说明!那么就按你说的,char **c是二级指针,而char(*b)[4]是个数组指针,指向一个含有4个元素的数组,类似于:char* b = (char*)malloc(sizeof(char)*4),
b="123";
两者在层次上不一样的,c=b;这样赋值为c的第一级赋值,相当于给c[0]的地址赋值,并没有给c[0]的内容赋值,具体值的内容我们不知道,也不确定。
这个真不好说清楚,这下你还是不理解我也没辙了......
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chiconysun
2012-05-19 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2594万
展开全部
char (*b)[4]={"123"};
这个有语法错误吧
更多追问追答
追问
请问是哪里错了呢?
追答
前者是数组指针,后者是普通指针(const)型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式