C语言对于常量和变量,只是语言层面对于程序员权限而已,在内存层面没有很好的保护。可以理解成对于程序员来说,常量(constant)就是只读(only-read)权限,变量是读写(read&write)权限。
#include "stdio.h"
int main()
{
const int x = 10;
//const int * xp=&x;
//int* ptr =xp;
//int* ptr =&x;
int* ptr = (int*)&x;
*ptr = 20;
printf("x=%d",x);
int y =30;
const int *yp =&y;
y=40;
printf("y=%d",y);
return 0;
}
Windows下,VScode使用GCC编译,正常输出,随缘报警告,注释部分全都可以编译通过。
这篇博客说C++会不太一样,没试过:
“C++ 中禁止把const char* 型指针变量的内容赋给char *型指针变量(C中会警告),但是char *型指针变量的内容可以赋给const char*型指针变量”
C++中常量指针和普通指针的相互赋值问题_指针不能赋值给指针_Legends_Never_Die的博客-CSDN博客