C语言-指针与CONST(只适用于C99)

指针是const

  • 表示一旦得到了某个变量的地址,不能再指向其他变量
  • int * const q = &i;//q 是 const
  • *q = 26; //OK
  • q++; //ERROR

所指是const

  • 表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)
    • const int *p = &i;
    • *p = 26; // ERROR! (*p) 是const
    • i = 26; // OK
    • p = &j; // OK

区别

  1. int i;
  2. const int* p1 = &i;
  3. int const* p2 = &i;
  4. int *const p3 = &i;
  • 如果const在*的前面,那么表示它所指的东西不能修改,第二和第三种形式一样
  • 如果const在*的后面,那么说指针不能被修改

转换

  • 总是可以把一个非const的值转换成const的
    void f(const int* x);
    int a = 15;
    f(&a); // OK
    const int b = a;
    f(&b); // OK
    b = a + 1; // ERROR!
  • 当要传递的参数的类型比地址大的时候,这是常用的手段:既能用比较少的字节数传递值给参数,又能避免函数对外面的变量的修改

const数组

  • const int a[] = {1,2,3,4,5,6,};
  • 数组变量已经是const的指针了,这里的const表明数组的每个单元都是const int
  • 所以必须通过初始化进行复制

保护数组值

  • 因为把数组传入函数是传递的是地址,所以那个函数内部可以修改数组的值
  • 为了保护数字不被函数破环,可以设置参数为const
    • int sum(const int a[], int length);
  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值