c语言数组给二级指针赋值问题求解~

chara[3][4]={"abc","ABC","123"};char**d;d=a;printf("a=%d\n",a);printf("d=%d\n",d);pri... char a[3][4]={"abc","ABC","123"};
char **d;
d=a;
printf("a=%d\n",a);
printf("d=%d\n",d);
printf("a[0]=%d\n",a[0]);
printf("d[0]=%d\n",d[0]);
输出a与b相同
a[0]输出的是指向a[0][0]的地址
我现在不理解的是b[0]的值为什么会是'\0cba'呢?
b所存的值不是指向a[0][0]的地址吗?
展开
 我来答
saloyun
2012-05-20 · TA获得超过342个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:363万
展开全部
首先,你理解的没错。
b和a都指向了同一块内存。
这块内存的内容是61 62 63 00 41 42 43 00 31 32 33 00
a[0]这个指针,我们知道这个指针是一个指向四个字符的字符串,所以可以得到它的值是abc\0,即61 62 63 00
而对于d指针,我们仅仅知道它是一个二维的指针,并不知道它第一维的空间是多大。于是取里面的值当作一个指向char的一维指针,一个指针占4个字节,按低位往高位存储。你可以这样理解,假设有一个char * pchar = d[0],那么 pchar的就是固定的,是一个指向0x00636261的指针。这就是你看到 "\0cba"了。
更多追问追答
追问
可是a[0]不是应该指向'abc'的首地址,也就是指向'a'的地址吗?那a[0]的值不是存的'a'的地址吗?
追答
注意看我的说明。
假设61 62 63 00 41 42 43 00 31 32 33 00存储在0x00 88 88 88的内存单元中。

a[0]是一个指向的指针,它存储的值是0x00 88 88 88,因为我们知道它是一个指向四个字节的内存的指针。如果对这一点有疑问,你可以去参考一下教材二维数组的说明。

d也是是指向0x00 88 88 88的指针
d[0]是取出0x00 88 88 88的前四个字节组成指向0x00 63 62 61。
看灰过来了
2012-05-20 · TA获得超过879个赞
知道小有建树答主
回答量:508
采纳率:83%
帮助的人:296万
展开全部
b=a;b[0]就是*(b+0),也就是a[0]的值,a[0]是a[0][0]的地址。所以输出的是一个地址。我猜你看到的应该是个十六进制数吧,你是不是认为是你第一个字符串的倒序啊,你试着把第一个字符串改变一下,看输出的样子,就能确定你输出的这个到底是不是十六进制数了
追问
当我输出b[1]的时候值是'\0CBA'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0c7f977
2012-05-20 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:96.3万
展开全部
我这编译过不了,说"d=a”有误,不同类型
追问
我用devc能编译的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暖心笑匠大叔
2012-05-20 · TA获得超过162个赞
知道小有建树答主
回答量:275
采纳率:66%
帮助的人:46.3万
展开全部
哪来的b?并且的d【0】的输出都是为整型数,,怎会有字母呢,,你是不是把题抄错了??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甦醒c0b8d
2012-05-20 · 超过14用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:49.1万
展开全部
要么你查下printf() 的输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式