const和指针的结合使用

const可以修饰变量、修饰指针

1.const修饰变量(常变量)

const修饰变量n后,保护了变量n,使其不能被赋值修改。(但可以使用指针修改)

​
#include <stdio.h>
 
int main()
{
    const int n = 10;
    //n = 20;    
    printf("%d\n", n);
 
    //可以使用指针修改
    int *p = &n;
    *p = 20;
    printf("%d\n", n);
 
    return 0;
}

​

2.  const修饰一级指针

<1>  const放在*左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变(但是指针本身的内容可以改变)

const int *p = &n;        n里面的值不能被改变

*p = 20;        //会报错

<2>  const放在*右边,修饰的是指针变量本身,保证了指针变量的指向不能修改,(但是可以通过指针改变指针指向的内容)

int  *  const q=&a;//const修饰q本身,q的本身不能做修改,即q的指向不能修改
*q = 10;  //但q指向的内容可以修改

<3>  *前后都有const,此时指针本身以及指向的内容均不能修改

int a=0;
int b=0;
int main(){
     const int* const r = &a; //此时r本身和r指向的内容均不能修改
     *r = 10;    // F   修改了r指向的内容
      r = &b;    // F   修改了r本身

}

3.  const修饰二级指针

<1>  

int a = 0 ;
int b = 0 ;
const int * p = &a ;
int * const q = &a;
int **s = &p ;    //定义二级指针s,指向p
s = &q ;   //  由上条语句,定义二级指针s时没有限定,所以该语句正确
**s = 20 ;  //  正确,此处通过s改变a的值

<2>

int a = 0 ;
int b = 0 ;
const int * p = &a ;  // 此处限定a,不能通过*p修改,但可以改变p的指向
const int **t = &p ;  //定义二级指针t指向p,p又指向a,由于*p不能被修改,所以**t也不能被修改
*t = &b ;   //  T  *t没有限制,可以指向其他内容
**t = 10 ;  //  F  **t不能被修改

<3>  

int a = 0 ;
int b = 0 ;
int *const q = &a ;  //q的指向不能改变,但q指向的内容可以通过*q改变
int *const *s = &q ;  //  定义二级指针s,限定了q,不能通过*s改变
*s = &b ;      // F  指向不能改变
**s = 100 ;    // T  **s无限制

总结:对于一级指针,分清楚const修饰的是谁,哪些可以变,哪些不能变,在上述代码都有明确  描述。  二级指针只是一级指针的深入理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值