`
yaasshole
  • 浏览: 664802 次
文章分类
社区版块
存档分类
最新评论

C语言难点专题——const

 
阅读更多

1. const对值类型的数据修饰: 如基本类型(int, double, char), struct, array

  • 值类型的数据,const放置在前面和后面都一样。
  • 对于struct和 Array类型的数据, 跟java的类对象不同,由于java都是对象的引用,所以只要求引用不乱指就行, 而c中,直接要求这个对象的内部成员都不可改变,即struct的任何成员,不可改变,array的任意一项不可改变。这就意味着:

const struct abc a;
a.score = 10; //不容许再次赋值

2. const对地址类型数据的限制, char*, char**等

  • const和 * 的相对位置,决定了const 到底是修饰指针不可变还是内容不可变
  • const放在* 之后,表示指针不可变, const 放在* 之前,表示内容不可变。 我们可以这样理解,*P表示内容, 所以前面如果加const,当然是指内容不可变。 而仅仅一个P表示的是指针,前面如果用const修饰,当然实说,这个指针不变了。
  • 当指针类型的数据相互复制的时候,即右边的参数,交给左边的参数掌控。因此,左边的参数不能越权。

const char* pChar = "agc";

char* pp = pChar; //这里权限信息丢失了,导致pp可以任意操作,有些编译器直接报错,有些要到运行才抛出异常

经常让人迷惑的一个问题:

扩展一下,下面有错吗?

char* const pChar = "agc";

char* pp = pChar;

答案是无错。 提示: pChar不能乱指,当赋值后,放置同一个东西, pChar是否为const,并没有因此改变。

  • 左边的指针,可以在右边的基础上添加新的修饰,比如原来指针const,新指针可以是const的指针和const的内容。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics