#include<stdio.h>
#include<string.h>
int main()
{
char * p = "abc";
char * p1 = "abc";
printf("%d %d", p, p1);
}
当我打印两个指针的值时,它打印的是相同的地址.为什么?
#include<stdio.h>
#include<string.h>
int main()
{
char * p = "abc";
char * p1 = "abc";
printf("%d %d", p, p1);
}
当我打印两个指针的值时,它打印的是相同的地址.为什么?
具有相同内容的两个不同字符串文字是放在相同的内存位置还是放在不同的内存位置取决于实现.
您应该始终将p
和p1
视为两个不同的指针(即使它们具有相同的内容),因为它们可能指向或可能不指向同一地址.你不应该依赖于编译器优化.
C11 Standard, 6.4.5, String literals, semantics
未指定这些数组是否是不同的,只要它们的 元素具有适当的值.如果程序试图 修改这样的数组,行为未定义.
打印格式必须为%p
:
printf("%p %p", (void*)p, (void*)p1);
参见this answer了解原因.