如果两个指针的地址相同,则改变其中一个指针的值

Meg*_*raj 3 c pointers literals

我有一个问题,我看到两个指针的地址在这里是相同的(两个指针的地址是相同的),也由蓝色月亮回答.这让我更加怀疑.由于两个指针都有相同的地址,我想改变其中一个指针的值,期望值也会在其他指针中改变(因为它们具有相同的地址).但它给出了分段错误.我在下面的代码中显示它.

#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);
}
Run Code Online (Sandbox Code Playgroud)

Day*_*rai 6

C90,6.1.4

如果程序试图修改任一表单的字符串文字,则行为未定义.

在你的情况下,这种未定义的行为对你有利,所以你得到Seg错误.除了这个打印指针使用%d不是一个好的做法,你应该使用%p.

现在来自你给出的蓝月亮链接答案

你应该总是把pp1作为两个不同的指针(即使它们具有相同的内容),因为它们可能指向同一地址,也可能不指向同一地址.您不应该依赖编译器优化.