以下程序在 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;
}
以下程序在 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;
}
可以更改它,但行为未定义,如标准中所述!
它在 6.7.3 下的 c11
如果尝试通过使用具有非 const 限定类型的左值来修改使用 const 限定类型定义的对象,则行为未定义。如果尝试通过使用具有非 volatile 限定类型的左值来引用使用 volatile 限定类型定义的对象,则行为未定义。
int * const p=&x;
这不是一个有效的程序。&x
是类型的const int *
,但您将指针值分配给类型的对象int * const
:编译器必须发出警告并允许停止编译。