能力值:
( LV2,RANK:10 )
|
-
-
2 楼
#include "stdio.h"
void showstatic(int number) { static int snumber=number; printf("%d \r\n",snumber); } void main() { for(int i=0;i<5;i++) showstatic(i); }
|
能力值:
( LV7,RANK:140 )
|
-
-
3 楼
局部变量是储存在栈上的,当函数执行返回之后,栈的内容就不被保护了,下次函数执行进来的时候,会重新赋值。如果没有赋值的话,高版本编译器会报错提醒你使用了未初始化的变量。 而局部静态变量,是存在在数据段的,不管函数运行不运行,它都在那里,不会因为函数执行完毕就销毁。至于说只初始化一次,这个编译器会自动生成一串伪代码,大概类似于这样: bool bInit_snumber = false; if (!bInit_snumber) { snumber = number; } 而这个bInit_snumber就是系统自动给你分配的一个空间,你可以认为是一个你不会访问到的全局变量。
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
#include "stdio.h"
void showstatic(int number) { static int snumber; snumber=number; printf("%d \r\n",snumber); } void main() { for(int i=0;i<5;i++) showstatic(i); }
|
能力值:
( LV7,RANK:140 )
|
-
-
5 楼
你可以验证一下: int* p = 0; void showstatic(int number) { static int snumber = number; p = &snumber; //不要对非静态变量进行这样的操作 printf("%d \r\n", snumber++); } void main() { for (int i = 0; i < 5; i++) showstatic(i); *p = 0; //观察一下这一行注释掉与不注释的输出区别。 for (int i = 0; i < 5; i++) showstatic(i);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
存在数据段这个知道啊!现在问题是数据段该有的地址找不到该值?就我这样代码,调试中不能查看静态变量地址,只能打印这个咋解决?VC6.0
|
|
|