const是C语言的一个关键词,也可以叫做常量修饰符,
意即其所修饰
的对象为常量(immutable)。
const有几种用法,当他修饰变量时表明这个变量是只读的,但并不是不能修改的,还是可以通过一些方法修改,在本文结尾可以探讨下修改的方法
1,const的普通用法
const int n=10; //这里注意到,const在应用时必须初始化,否则是不合法的
这里很明显,n为只读变量,也可以叫做变量常量,不过其本质是在全局数据段或者堆栈中定义的只读常量,不是真正在字符串常量区
2.const修饰指针
const int *p ;
int const *p; //上面这两种情况是修饰指针所指向的数据,即(*p)是只读的
int * const p; //这种情况是修饰指针变量的,即(p)是只读的
记住这个的想技巧,以“*”为分界线,const在其左边时为修饰指针所指向的变量,在右边时是修饰指针变量的。
3.const最有用的用法----函数地址传递参数
void foo(const
int *p);
a,这里相当于函数调用者声称“我给你一个指向她的指针,但你不能去修改它”
b。用于限定函数的形参,这样该函数将不会修改实参指针所指向的数据;
static作用:“改变生命周期” 或者 “改变作用域”
程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。
1.作用于变量:
用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出代码块时释放内存单元(生命期)。用static声明局部变量时,则改变变量的存储方式(生命期),使变量成为静态的局部变量,即编译时就为变量分配内存,直到程序退出才释放存储单元。这样,使得该局部变量有记忆功能,可以记忆上次的数据,不过由于仍是局部变量,因而只能在代码块内部使用(作用域不变)。
用static声明外部变量-------外部变量指在所有代码块{}之外定义的变量,它缺省为静态变量,编译时分配内存,程序结束时释放内存单元。同时其作用域很广,整个文件都有效甚至别的文件也能引用它。为了限制某些外部变量的作用域,使其只在本文件中有效,而不能被其他文件引用,可以用static关键字对其作出声明。
总结:用static声明局部变量,使其变为静态存储方式(静态数据区),作用域不变;用static声明外部变量,其本身就是静态变量,这只会改变其连接方式,使其只在本文件内部有效,而其他文件不可连接或引用该变量。
对于修改const定于的变量,网上解释用指针指向他,然后对其进行修改
程序如下
#include
#include
int main()
{
int const a=10;
int *p;
p=&a;
*p=6;
printf("%d %d ",a,*p);
return 0;
}
输出为:6 6
说明通过指针还是能修改其值的