111指针问题?

新手上路,请多包涵

屏幕截图 2023-10-28 135801.png
指针不是存放首地址吗,怎么不一样呢

阅读 579
2 个回答

因为他们确实在两个不同的地方。

整个电脑里,"abcd" 这四个连续的字符不是只能存在一份的,何以有很多份,于是地址就不一样了。

而且,p2 的 "abcd" 后面是 '/0' ,p1 的 "abcd" 后面是 'e' ,是不可能放在同一个地方的。

新手上路,请多包涵
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语言标准的要求,不同的编译器可能会有不同的行为。

综上所述,打印出的地址可能会因编译器和编译选项的不同而有所不同,但通常情况下,相同的字符串常量会被合并存储,导致相同的指针具有相同的地址。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进