如何解决为什么指针s的地址与我们访问未命名数组的第一个元素时的地址相同?
如果字符串基本上是指针,那么它如何作为数组?即:您可以使用说:
char *s = "David"
printf("%p",&s);
printf("%p",&s[0]);
//Both of the above ones will give same output
printf("%p",&s[1]);
printf("%p",&s[2]);
//These will have different output
问题是为什么指针s
的地址与我们访问未命名数组的第一个元素(即s[0]
)的地址相同
解决方法
您的代码片段中存在多个问题:
- 存在语法错误,例如缺少
;
-
%p
期望为void *
,但是您提供了char **
和char *
值。 -
printf("%p",(void*)&s)
和printf("%p",(void*)&s[0])
不会产生相同的输出:第一个将打印指针s
的地址,而第二个将打印指向s
的地址,即:字符串文字"David"
的字符串,它是6个字节的数组,包含值'D'
,'a'
,'v'
,'i'
,{{1 }}和'd'
。 - 最后2条语句应在同一数组中打印
'\0'
和a
的地址。
v
定义了一个指针变量char *s = "David";
和一个6字节的全局未命名数组,并使用该数组的地址初始化了s
的值。
如果您以此方式定义2个变量:
s
您将拥有2个不同的指针char *s1 = "David";
char *s2 = "David";
和s1
,它们可以指向也可以不指向同一全局未命名数组。尚未确定相同的字符串文字在运行时会产生相同还是不同的对象。
对于s2
和gcc
,上面产生的代码与此等效:
clang
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。