C语言下的const
在C语言下const修饰的变量具有常属性,但仍是变量(不知道理解对不对)
无法用于创建数组
const int g_num = 5;
int main()
{
const int num = 5;
int arr[num] = { 0 }; //err
int arr2[g_num] = { 0 }; //err
return 0;
}
在C++下const修饰的变量是常量??
可用于创建数组
const int g_num = 5;
int main()
{
const int num = 5;
int arr[num] = { 0 }; //ture
int arr2[g_num] = { 0 }; //ture
cout << arr[0] << endl;
return 0;
}
用指针可以修改C下const修饰的变量,用指针不可以修改C++下const修饰的变量
查到的答案:C语言中const只表示只读,但是有自己的存储空间,所以可以用指针来修改;
C++中只在以下特定情况下分配内存,平时放在一个key和value符号表中,并且拿不到地址:
const int g_num = 5;
int main()
{
const int num = 5;
int* p = #
*p = 10;
printf("%d %d\n", num, *p); //num = 10; *p = 10;
int* pc =&g_num;
*pc = 100; //
printf("%d %d\n", g_num, *pc); //err 引发了异常: 写入访问权限冲突。
return 0;
}
```问题:为什么const 修饰的全局变量的值不可以用指针搜索,也不能用于创建数组
```c++
const int g_num = 5;
int main()
{
const int num = 5;
int* p = (int *) #
*p = 10;
cout << *p << endl; //*p = 10;
cout << num << endl; //num = 5;
int* pc = (int*)&g_num;
*pc = 100;
cout << *p << endl; //*pc = 100;
cout << g_num << endl; //g_num = 5;
return 0;
}
问题:C++中的const修饰的变量是否为常量,存放在全局区?
供参考:https://blog.csdn.net/tranquilllll/article/details/123590348
C语言和C++语言中const关键字的作用和区别是什么?
const关键字的作用是将定义的变量指定为不可修改的常量,它可以修饰变量、指针、函数参数、成员函数等。在C语言中,const修饰的变量具有常属性但仍是变量,不能用于创建数组;在C++中,const修饰的变量则是常量,可用于创建数组。
const修饰的变量可以存放在全局区,包括C++中。但是修改这个变量的值是非法的。
在C语言中,用指针可以修改const修饰的变量,但不可以修改C++中const修饰的变量,因为C++中的const修饰的变量是真正的常量。
总结: 1. C和C++中的const关键字都可以用于定义常量; 2. C中const关键字定义的变量不能用于创建数组,而C++中可以; 3. C++中const修饰的变量是真正的常量,不能被修改; 4. const修饰的变量可以存放在全局区,包括C++中。