const
const全名 Constant意为:常数,常量。
const修饰变量,其作用也在编译阶段,告诉编译器,该变量我私定终身了(Tips:编译四个阶段:1预处理define\include\条件编译等;2编译;3汇编;4链接),在以后的运行过程中,休的胡来。
const和define功能类似但是它们是有区别的,比如说:作用的阶段,一个在预处理,一个在编译;define定义的就是个常量,而const修饰的实际上是一个变量,只不过它是只读的而已。
一、修饰变量
1.局部变量:
对于const修饰的局部变量,是不允许显示的修改,但是可以通过其他比如指针的方法来修改的。
eg:
vold func(vold)
{
char arr[2];
const int a=0;
arr[2]=1;
printf("%d\n",a);//a==1
}
2.全局变量
对于const修饰的全局变量来说是不允许修改值的。
二、修饰指针
int const *p1;//const int *p1等价
int * const p2;
const int * const p3;
第一行p1指向的内容只读。
第二行p2本身只读。
第三行p2本身和指向的内容都只读。
三、修饰函数和形参
1.修饰函数:
修饰函数实际上就是修饰返回值,对于返回值是一个变量的,修饰也没有什么意义,大多数用于修饰返回指针类型的函数返回值。
const int* func(void)//表示返回的地址指向的内容只读
接收的话只能用const指针接受,否则编译会出错:
const int* b = func()
2.修饰形参:
这里的作用就比较大了:
//保护源字符串不被修改,若修改src则编译出错。
void fun(const char * src, char * des)
{
strcpy(des,src);
}
记住一个要点:“姑娘你可以玩,但是不要玩坏了””
桥黑板,画重点:
1.const 作用在编译阶段2.用 const 修饰的变量,无论是全局变量还是局部变量,生存周期都是程序运行的整个过程
3.用const修饰过的局部变量只是有了静态特性,并没有说它变成了静态变量。
4.const定义的是变量,而define定义的是常量。
5.const修饰指针,以*为中心,const在*左边,则指针指向的数据只读,const在*右边,则指针本身只读,四个字:左数右指。