【问题标题】:const variable value is changed by using a pointerconst 变量值通过使用指针来改变
【发布时间】:2013-08-24 08:56:06
【问题描述】:

以下程序在 gcc 上的输出是 50。 怎么可能,因为 x 是常量变量,而 *p 是 x 本身,因为 p 是指向 x 处的值的常量指针。 turbo c 在哪里给出编译器错误。 这是未定义的行为吗?请解释一下。

#include<stdio.h>

int main()
{
    const int x = 25;
    int * const p = &x;
    *p = 2 * x;
    printf("%d", x);
    return 0;
}

【问题讨论】:

  • 如果你这样做,它的未定义行为。
  • 你的编译器不允许这样做,不允许从const int*转换为int* constideone.com/AnuWLM
  • 删除了 C++ 标签:这不会编译为 C++。 C 编译器可能会发出可怕的警告。
  • int main()...
  • @Krishna 没有为错误的指针分配而磨损 gcc p=&amp;x

标签: c


【解决方案1】:

可以更改它,但行为未定义,正如标准中所述!

它在 c11 下 6.7.3

如果尝试通过使用具有非 const 限定类型的左值来修改使用 const 限定类型定义的对象,则行为未定义。如果尝试通过使用具有非 volatile 限定类型的左值来引用具有 volatile 限定类型定义的对象,则行为未定义。

【讨论】:

  • 标准报价==自动+1。
【解决方案2】:
int * const p=&x;

这不是一个有效的程序。 &amp;xconst int * 类型,但您将指针值分配给 int * const 类型的对象:编译器必须发出警告并允许停止编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多