C语言之常指针


今天首先学习了const变量定义的方式(两种):
第一种定义方式:const 在类型的前面,例如:
const int var=100;
第二种定义方式:const 在类型的后面,例如:
int const var1=999;
注:这两种定义方式没有什么区别。

1、const变量在定义的时候进行初始化;
2、当一个变量被声明为const变量时,意味着该变量是一个常量,不可被修改;
3、该变量只能做右值,不能做左值;

然后我们学习了,const指针,也叫做常指针。

1、常指针在声明的时候进行初始化;
2、指针不能再指向别的变量,指针的value不了被修改。
3、可以通过指针来修改变量的值。

常指针:例如:int * const pp=NULL;

指向常量的指针:
int x = 123;
const int *pc = &x;
1、指向常量的指针,该指针可以指向别的变量,指针的value可以更改。
2、指向常量的指针、不能赋值给一个普通的指针


接下来我们做了一些练习(如下):

 const int x=2,y=3;      //定义基本类型的const变量
 int z=3;                         //定义一个非const 变量 
 const int *pc=&x;       //指向常量的指针
 int *const cp = &z;     //常指针,指针不能再指向别的变量
 int *pp = &z;               //定义一个非const指针pp 把z的地址给了指针

  z=y;                            // 对 const 变量只能做右值,不能做左值

 x = y;                          // 错 x是const变量,所以x的值不可更改

 pc=&z;                      // 对 指向常量的指针,不能通过指针去修改指针所指向
                                   //的内存空间的值,但是,指针可以指向别的变量。

 *pc=10;                   //错 指向常量的指针,不能通过指针去修改指针所指向
                                  //的内存空间的值
 *pc=y;                      //同上
 *pc = 5;                   //同上
  pc=pp;                   // 对 指向常量的指针可以改变指向的地址
                                 //pc是一个指向常量的指针,pp是一个普通的指针。
                                //pp是一个普通的指针。用一个普通的指针给一个常量的指针赋值是可以的。
  pp = pc;              /*对
                               用一个指向常量的指针,赋值给一个普通的指针,不可以,
                              如果可以,那么就可以通过普通的指针去修改内存的值
                               */

 z = 5;                   //对 变量可以改变值,给一个非const赋值是可以的。

z = x; //对 const只能做右值,用一个const的变量给一个非const变量赋值可以。

*cp = x; //错 通过常指针改变指针所指向变量的值,原则上来讲是可以的,
//如果只想的变量是const的,那么不停编译会有不同的结果。

cp=&x; //错 cp是常指针不能改变指针自身的值。给常指针赋值是错误的。

//两种观点
pp = &x; //原则上是可以的,pp为普通的指针,可以通过这种方式给pp赋值。
//错,通过指针去修改变量的值,而不管该变量是否为const,
//x是const常量,不能被改变。

pp = pc; //错 普通的指针可以改变它指向的地址的值,指向常量的指针不可以改变它指向地址的值
//错指向常量的指针不能赋值给一个普通的指针

pp = cp; //对 cp指向的是一个变量的地址,pp是一个不同的指针,可以把cp的值给pp
//常指针可以赋值给一个普通的指针

const int * const pp = &a; //内存空间和值都不能被改变
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值