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]的地址吗? 展开
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]的地址吗? 展开
展开全部
首先,你理解的没错。
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"了。
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。
展开全部
b=a;b[0]就是*(b+0),也就是a[0]的值,a[0]是a[0][0]的地址。所以输出的是一个地址。我猜你看到的应该是个十六进制数吧,你是不是认为是你第一个字符串的倒序啊,你试着把第一个字符串改变一下,看输出的样子,就能确定你输出的这个到底是不是十六进制数了
追问
当我输出b[1]的时候值是'\0CBA'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我这编译过不了,说"d=a”有误,不同类型
追问
我用devc能编译的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哪来的b?并且的d【0】的输出都是为整型数,,怎会有字母呢,,你是不是把题抄错了??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要么你查下printf() 的输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询