|
5鱼币
char a[] = "abc";
char *b = "abc";
printf("%p\n",&a);
printf("%p\n",a);
printf("%p\n",*a);
printf("%p\n",&b);
printf("%p\n",b);
printf("%p\n",*b);
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
output:
0x7fff34cc81c0
0x7fff34cc81c0
0x61
0x7fff34cc81b8
0x400654
0x61
4
8
想请问一下
0x400654 代表什么意思呢?
而
char a[] = "abc";
char *b = "abc";
存在哪些区别吗?
谢谢
|
最佳答案
查看完整内容
char a[] = "abc"; ---1
char *b = "abc"; ---2
0x400654 是b的值。。。而b是字符数"abc"---2的首地址。。。所以0x400654位置存放的就是"abc",
不信你可以用OD调试,
然后,,a[] 和 *b 肯定不一样。
a[]比*b的效率要低一些。。。我以前就测试过。。首先说明,a[]和b代表的字符串
都存放在内存中, 然后在对a[]这个字符串进行操作时,先要将a[]代表的字符串复制进进程栈,
而对*b代表的字符串进行操作时确实直接操作的内存 ...
|