我有一个问题,我看到两个指针的地址与这里的问题相同(两个指针的地址相同 https://stackoverflow.com/q/19088153/1292348),蓝月亮也回答了。
这让我产生了更多疑问。由于两个指针具有相同的地址,我想更改其中一个指针的值,期望其他指针中的值也会更改(因为它们具有相同的地址)。但它给出了分段错误。我在下面的代码中展示了它。
#include<stdio.h>
#include<string.h>
int main()
{
char * p = "abc";
char * p1 = "abc";
printf("%d\n %d\n", (void *)p, (void *)p1);
printf("%s\n %s\n", p, p1);
*p = 'b';
printf("%d\n %d\n", p, p1);
printf("%s\n %s\n", p, p1);
}
C90,6.1.4
如果程序尝试修改任一形式的字符串文字,
行为未定义。
在您的情况下,这种未定义的行为对您有利,因此您会遇到段错误。除了使用此打印指针之外%d
不是一个好的做法,你应该使用%p
.
现在从您给出的蓝月亮链接答案
你应该始终对待p
and p1
作为两个不同的指针(即使它们具有相同的内容),因为它们可能指向也可能不指向相同的地址。您不应该依赖编译器优化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)