设为首页 加入收藏

TOP

浅谈常量指针与指针常量(一)
2014-07-19 22:53:02 来源: 作者: 【 】 浏览:199
Tags:常量 指针

  关键要看const修饰的是谁:

  首先一点:int const与const int的写法是一样的.

  从左向右,看const离谁( 究竟是‘*’, 还是‘指针变量名’)比较近就是修饰谁的,比如

  const * p :表示*p是常量,也就是*p 不可变 (暗示p可变,const没有修饰p)

  * const p :表示p是常量,也就是p不可变 (暗示*p可变,const没有修饰‘*“ )

  再如:

  int a;

  int * const p = &a //指针常量,*p可以修改*p = 8;(OK)

  p不可以修改 p++(ERROR)

  (本质上是个指针型的常量,此常量类型为int* const)

  int a,b;

  const int *p = &a;//常量指针 *p不可修改 *p = 8;(ERROR)

  p 可以修改 p = &b (OK)

  (本质上是个指针,它指向常量罢了)

  还有一种

  const int * const p = &a; // *p 和 p均不可改变了

  /*常量指针的用法实例*/

  int i1=30;

  int i2=40;

  const int * pi=&i1;//定义常量指针,*pi不可以改变,pi可以改变

  pi=&i2; //4.注意这里,pi可以在任意时候重新赋值一个新内存地址

  i2=80; //5.想想看:这里能用*pi=80;来代替吗 当然不能

  printf( “%d”, *pi ) ; //6.输出是80

  /*指针常量的用法*/

  int i1=30;

  int i2=40;

  int * const pi=&i1;

  //pi=&i2; 4.注意这里,pi不能再这样重新赋值了,即不能再指向另一个新地址。

  i1=80; //5.想想看:这里能用*pi=80;来代替吗 可以,这里可以通过*pi修改i1的值。

  printf( “%d”, *pi ) ; //6.输出是80

  pi的值是可以被修改的。即它可以重新指向另一个地址的,const 修饰的是整个*pi(注意,我写的是*pi而不是pi)。所以*pi是常量,是不能被赋值的.

  pi值是不能重新赋值修改了,它只能永远指向初始化时的内存地址了. pi因为有了const 的修饰,所以只是一个指针常量(指向固定值),

   

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用栈实现队列(C语言实现) 下一篇C语言指针讲解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)
·C语言指针的定义和使 (2025-12-26 05:21:31)
·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)