C语言-const 修饰符

徐建岗网络管理 2020-06-11

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]);
    };
    
}

相关推荐

蜗牛慢爬的李成广 / 0评论 2020-01-28