关于C中常量指针的困惑

时间:2013-12-14 05:38:11

标签: c pointers const

对于const int *ptr
您无法更改ptr

指向的值
int main()
{
    const int *p;
    int a=5;
    p=&a;   
    printf("%d",++(*p));
}

以上程序引发了我的错误。这很公平。

但为什么下面的代码不会给我带来错误。

int main()
{
    const int const *p;
    int a=5;
    p=&a;
    a=100;  // changing the content pointed by the constant pointer

    printf("%d",(*p));
}

我正在更改const指针指向的值。即我正在改变var a的值 5到100?

2 个答案:

答案 0 :(得分:1)

声明a = 100;意味着您使用变量a将值更改为100,这不是常量。因此,您将能够更改a。

的值

但是,如果您尝试运行以下代码:

int main()
{
        const int const *p;
        int a=5;
        p=&a;
        *p=100;
//      a=100;
        printf("(*p)=%d",(*p));
        return 0;
}

这会给你错误,因为你要用来改变值的指针指向一个只读位置。因为您在指针位置声明的值是常量。

这里a和p是2个不同的变量,它们有自己的属性。

答案 1 :(得分:0)

变量'a'不是常数,因此您可以更改它的值。 const int a = 5;无法改变。

变量'p'指向'a'的值,但不会将变量'a'更改为常量。