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

来源:互联网 发布:js slice和substring 编辑:程序博客网 时间:2024/06/10 20:49

储存时期:

一个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
原创粉丝点击