2

以下程序在 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;
}
4

2 回答 2

9

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

它在 6.7.3 下的 c11

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

于 2013-08-24T08:58:09.597 回答
3
int * const p=&x;

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

于 2013-08-24T08:59:39.020 回答