指针不是存放首地址吗,怎么不一样呢
const char *a ="abide";
const char *b ="abid";
const char *c ="abide";
printf("a: %p\n",a);
printf("b: %p\n",b);
printf("c: %p\n",c);
//a: 0x555c83c03004
//b: 0x555c83c0300a
//c: 0x555c83c03004
1.在这段代码中,我们定义了三个指向常量字符串的指针,并打印它们的地址。根据这个代码,由于字符串常量通常会被合并存储,所以相同的字符串常量可能会具有相同的地址。
2.在大多数情况下,编译器会尝试将相同的字符串常量合并为同一个实例,这样可以节省内存空间。因此,即使你定义了多个指向相同内容的字符串常量的指针,它们可能会指向同一个地址。
3.当我们打印这些指针的地址时,可能会发现a和c的地址是相同的,而b的地址可能与它们不同。这是因为在某些情况下,编译器可能会对不同的字符串常量进行合并优化,但这并不是C语言标准的要求,不同的编译器可能会有不同的行为。
综上所述,打印出的地址可能会因编译器和编译选项的不同而有所不同,但通常情况下,相同的字符串常量会被合并存储,导致相同的指针具有相同的地址。
因为他们确实在两个不同的地方。
整个电脑里,"abcd" 这四个连续的字符不是只能存在一份的,何以有很多份,于是地址就不一样了。
而且,p2 的 "abcd" 后面是 '/0' ,p1 的 "abcd" 后面是 'e' ,是不可能放在同一个地方的。