c prime plus 得内存,储存类,链接的后记1static

储存时期:

一个c变量的储存时期为:

1:静态储存时期

(该变量可在程序执行期间一直存在);

例如:全局变量(具有文件作用域)


对于static这个关键词来讲:

他表明链接的类型,而非储存时期

(对于文件作用域变量,无论他具有内部链接

还是外部链接,都具有静态储存时期。对于用static

声明的文件作用域变量只有内部链接)


2:自动储存时期

(该变量只在 他所在的代码块起作用);

例如:自动变量(具有代码块作用域)


void func(int a);


int giants=0;


int main(int argc,char const* argv[])

{int giant=5;

giant=func(giant);

printf("giant=%d\n",giant);

giant=func(giant);

printf("giant=%d",giant);

return 0;

}


int  func(int a){

static int a=2;

a++;

return a;

}

输出:giant=3

            giant=4;

因为static所声明得变量只定义一次(文件作用域)

不会重复声明

(所以对函数参量不能使用static声明)// c语言也不允许


那么问题来了?

1static只定义一次,为什么?

2计算机又是如何实现的呢?

解:

1:static如上文所提,拥有文件作用域,而拥有文件

作用域的变量定义时(就如同你定义一个全局变量)时的心理。

你懂得。。。只要一次足矣,等你爱我(有点跑题,请原谅)

2:计算机在内存中此变量的地址后面加上一点标志就可以了。

例如:

......................

int number=5;

int i;

int* p;
for (i=8; i > 0; i--)
{
static int n=number;

p=&n;//把n的地址赋给p
p++;//使p指向p的后面(4个字节后)的地址
*p=0;//把那里的值改为0

//对于不同的位数计算机你可以

//使用地址逐一访问,来寻找那个标志

//come have a try


n++;

printf("%d",n);

}

.......................

输出:66666666

其实C语言的很多东西都是用0,1来识别的

如最简单的if中判断,bool常量中的FLASE与TRUE。。

(还望各路人杰多多补充说明!)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值