我想知道是否可以通过指针隐式更改常量变量的值.我想出的例子如下:
#include <stdio.h>
int main(void) {
const int const_num = 10;
printf("const_num value: %d, const_num address: %p\n", const_num, &const_num);
void* ptr = (void*)&const_num;
printf("ptr value: %p, ptr reference value %d\n", ptr, *(int*)ptr);
*(int*)ptr = 20;
printf("ptr value: %p, ptr reference value %d\n", ptr, *(int*)ptr);
printf("const_num value: %d, const_num address: %p\n", const_num, &const_num);
return 0;
}
答案是,无论您 Select 哪种方式,都不能更改常量变量的值.但令我头疼的是输出的行为.前一个程序的输出如下所示:
const_num value: 10, const_num address: 0x16af26db8
ptr value: 0x16af26db8, ptr reference value 10
ptr value: 0x16af26db8, ptr reference value 20
const_num value: 10, const_num address: 0x16af26db8
因此,尽管const_num
保持其初始值,但指针引用的相同内存地址(0x16af26db8
)中的对象已从10
转换为20
.对此有没有可行的解释,或者它被认为是undefined种行为?