C语言之const与static的用法

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     说明通过指针还是能修改其值的
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值