先上C代码:
const int a = 10;
printf("a = %d\n", a);
int* p = &a;
*p = 100;
printf("a = %d\n", a);
这段代码在C语言中,可以正常运行。在C++中,会被告知int* p = &a;报错:
const int *" 类型的值不能用于初始化 "int *" 类型的实体
这段代码运行在以.c结尾的文件中可以通过,.cpp文件无法通过。
结论:
- C语言允许通过指针修改const修饰的变量值。
- C++不允许这样做。
在C++代码中:
#include<iostream>
int main()
{
int a = 10;
std::cout << "a = " << a << std::endl;
int* p;
p = &a;
*p = 100;
std::cout << "a = " << a << std::endl;
const int b = 20;
int* q;
// q = &b; // 不能将const int *类型的值赋值给int *类型的实体。 C语言可以,但是C++不许。
// 再次变形:如果const修饰的int *
const int* p1;
p1 = &a;
//*p1 = 1000; // 表达式必须是可修改的左值。这点在C和C++中都一样。
// 如果const修饰的是int *,不可以修改指针变量指向的内存地址的 值 。
// 但可以修改指针指向的地址。
p1 = &b;
system("pause");
return 0;
}
const int* p修改指针指向地址中存储的值,是被禁止的。
但是可以修改指针的指向。