const

关键字const:
a.const是用来定义只读变量的,切忌它定义的是变量,不是常量,真的常量是#define的和enum。
b.在陈正冲老师的这本书中的第35页,有说编译器不为普通const只读变量分配内存空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高,节省空间。具体的没怎么看懂,本次学习也不打算看懂了(因为它说const修饰的全局只读变量是在静态区的,我太认同)~~~嘿嘿
c.其实const就是修饰变量,然后这个变量就不能当作左值了,当作左值,编译器就报错!!!
d. 其实const中最不好区分的知识点是,如图:
 
(可结合上文指针篇了解指针用法)
个人理解:
const在*前:p(地址)可变,指向的内容(*p)不可变
const在*后:p(地址)不可变,指向的内容(*p)可变
 
计数任意数组中成员数:
sizeof((const char *)data)+1;
其实对于这四个情况的记忆很简单,就是看const跟谁近,是const *p   ,还是  * const  p,还是const  *  const  p,这样就很容易看出来const是修饰谁的了吧。
e.但是const修饰的变量可以通过,指针将其改变。
f.const修饰函数参数表示在函数体内不希望改变参数的值,比如说在strcmp等函数中,用的都是const  char*
g.const修饰函数返回值表示返回值不可以改变,多用于返回指针的情况:

cosnt int* func()  

  •  
  •       static int  count  =  0;  
  •       count++;  
  •       return &count;  

h.在看const修饰谁,谁不变的问题上,可以把类型去掉再看,代码如下:

struct student  

  •  
  •           
  • }*str;  
  • const str stu3;  
  • str const stu4; 

str是一个类型 ,所以在去掉类型的时候,应该都变成const stu3和const stu4了,所以说应该是stu4和stu3这个指针不能被赋值。

 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/Ph-one/p/3992052.html