C语言-const 修饰符
const
- const 是一个关键字,是用来修饰我们的变量的,也就是在声明变量的同时,可以使用 const 关键字来修饰
- 一般来说,被 const 修饰的变量举报一定程度的不可变性
- const 修饰基本数据类型(int ,double ,float , char)
const int num = 10; num = 20; // 报错:Cannot assign to variable ‘num‘ with const-qualified type ‘const int‘,不能为 const 修饰的变量进行赋值
- const 修饰数组,数组的元素的值不能修改
const int nums[5] = {1,2,3,4,5}; nums[0] = 10; // 报错:Cannot assign to variable ‘nums‘ with const-qualified type ‘const int [5]‘ const int nums[5] = {1,2,3,4,5}; // 完全初始化不能修改 // nums[0] = 10; const int nums1[5] = {1,2}; // 部分初始化也不能修改 // nums1[3] = 30; const int nums2[3]; // 未初始化的也不可以 // nums2[0] = 10;
- const 修饰指针(const int* p1 = &num int const * p1 = &num)
- 无法通过指针去修改指针指向的变量的值,但是如果直接操作变量的话是可以的
- 但是指针变量的值是可以改的,可以把另外一个变量的地址赋值给这个指针
int num = 10; const int* pnum = # // 无法通过指针去修改指针变量指向的变量的值 *pnum = 100; // 只读变量不可修改 printf("num = %i\n",num);
- const 修饰指针 2(int * const p1 = &num)
- 此时代表不能修改 p1 的值,但是可以去修改 p1 指向变量的值
// 修饰指针: const int * pnum / int const *pnum -->修饰的*pnum // int num = 10; // const int* pnum = # // 无法通过指针去修改指针变量指向的变量的值 // *pnum = 100; // 只读变量不可修改 // printf("num = %i\n",num); // 修饰指针: int * const p1 = # --> 修饰的 p1 int num = 10; int * const p1 = # *p1 = 100; // 修改值是可以的 printf("修改值后的 num 值:%i\n",num); int age = 20; // p1 = &age; // 此时不能修改p1 的值,也就是只能指向这个地址,不能指向别的地址,还能修改变量的值 //修饰指针:int const * const pnum = # -->修饰的* pnum 和 pnum int num2 = 30; int const * const pnum = # // *pnum = 300; // 不可修改 int num3 = 40; // pnum = &num3; // 不可修改
- const 使用场景
- const 修饰的特点
- 被 const 修饰的变量,是制度变量,只能去值,而不能改值,所以 const 变量的值自始至终是不会发生的
- 当某些数据是固定,在整个程序运行期间是不会发生变化的,并且你也不允许别人去修改,那么这个时候我们就可以使用 const
- 当函数的参数是一个指针的时候,这个时候,函数的内部有可能会修改实参变量的值,这个时候,函数想传递给调用者一个信息:不能修改实参变量的值,这个时候就可以给参数加一个 const
- 所以以后再调用这个函数的时候,这个参数被 const 修饰那么绝对修改不了我们的值
void fornum(int arr[],int len); void conForNum(const int arr[],int len); int main(){ // const 应用场景 // 我要写一个函数,但是不能修改我数组的值 int arr[] = {1,23,45,6,7,8,9,5,3,234,423,4}; int len = sizeof(arr) / sizeof(arr[0]); fornum(arr,len); // 哇此时发现被其他函数调用了但是,我的数组值可能被修改了 for (int i = 0 ; i < len; i++) { printf("main 函数中的 arr 数组的值arr[i] = %i\n:",arr[i]); // 因为传递的指针,所以函数中修改了我这里也修改了,那么怎么能保证我的数据不能被修改,我只给你用但是你不能修改 }; int arr2[] = {1,2,4,5,6,78,9}; int len2 = sizeof(arr2) / sizeof(arr2[0]); conForNum(arr2, len2);// return 0; } void fornum(int arr[],int len){ for (int i = 0 ; i < len; i++) { arr[i] = arr[i]+10; printf("arr[i] = %i\n",arr[i]); }; } void conForNum(const int arr[],int len){ for (int i = 0 ; i < len; i++) { // arr[i] = arr[i]+10; // 报错:只读变量不可赋值 printf("arr[i] = %i\n",arr[i]); }; }
相关推荐
往后余生 2020-09-17
CXsilent 2020-09-16
webgm 2020-08-16
Lophole 2020-06-28
sqliang 2020-06-14
xcguoyu 2020-06-13
前端开发Kingcean 2020-06-11
cbao 2020-06-10
yezitoo 2020-06-06
bigname 2020-06-04
前端开发Kingcean 2020-05-29
xiaofanguan 2020-05-29
ELEMENTS爱乐小超 2020-05-28
皖林 2020-05-11
wbczyh 2020-05-03
zuihaobushi 2020-04-30
89500297 2020-04-29