#include <string.h>
#include <stdlib.h>
void main()
{
for (int i =1;i<5; ++i)
{
static int a = i;
cout << a <<endl;
}
}
这段代码,输出的A的值都是1,编译器是如何做到,静态变量只初始化一次的?请教各位指点
20 个解决方案
#1
我想应该是放到了静态区的原因
#2
所有的对象(不仅仅是静态对象)初始化都只有一次
因为a初始化为1之后,一直都没有销毁(因为是static),所以不会再次初始化
因为a初始化为1之后,一直都没有销毁(因为是static),所以不会再次初始化
#3
static 只能声明一次,赋值可以多次,
你在循环外声明,然后赋值就可以得到1 2 3 4 了
你在循环外声明,然后赋值就可以得到1 2 3 4 了
#4
……
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main(void)
{
for (int i =1;i <5; ++i)
{
static int a;
a = i;
cout << a <<endl;
}
return 0;
}
#5
帮顶一下
#6
对。。。初始化只有一次。。如果你赋值就可以改变了。
#7
静态区的变量的生存期为整个源程序。所以他只需初始化一次,而自动变量存放在栈区,一旦调用过程结束就会被销毁。
#8
4楼分析很清楚。
你得赋值
你得赋值
#9
请问什么可以初始化两次?
#10
3楼说的浅显易懂!
#11
因为静态变量只能声明一次,但看赋值多次
#12
你把静态变量当成只能在声明它的函数中访问的全局变量就好了。
#13
3楼正解
#14
对编译器来说,不存在什么静态不静态,只有一个heap而已(global/static/etc.).和汇编参考就很容易理解了。
而非静态的,都是在stack中分配。
而非静态的,都是在stack中分配。
#15
顶一下
#16
久违了csdn
#17
你明白什么叫做初始化吗?
#18
这帖真好!强化了概念。
#19
那句话是反问……
#20
嗯,三楼说的很清楚明白,多谢
#21
#1
我想应该是放到了静态区的原因
#2
所有的对象(不仅仅是静态对象)初始化都只有一次
因为a初始化为1之后,一直都没有销毁(因为是static),所以不会再次初始化
因为a初始化为1之后,一直都没有销毁(因为是static),所以不会再次初始化
#3
static 只能声明一次,赋值可以多次,
你在循环外声明,然后赋值就可以得到1 2 3 4 了
你在循环外声明,然后赋值就可以得到1 2 3 4 了
#4
……
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
int main(void)
{
for (int i =1;i <5; ++i)
{
static int a;
a = i;
cout << a <<endl;
}
return 0;
}
#5
帮顶一下
#6
对。。。初始化只有一次。。如果你赋值就可以改变了。
#7
静态区的变量的生存期为整个源程序。所以他只需初始化一次,而自动变量存放在栈区,一旦调用过程结束就会被销毁。
#8
4楼分析很清楚。
你得赋值
你得赋值
#9
请问什么可以初始化两次?
#10
3楼说的浅显易懂!
#11
因为静态变量只能声明一次,但看赋值多次
#12
你把静态变量当成只能在声明它的函数中访问的全局变量就好了。
#13
3楼正解
#14
对编译器来说,不存在什么静态不静态,只有一个heap而已(global/static/etc.).和汇编参考就很容易理解了。
而非静态的,都是在stack中分配。
而非静态的,都是在stack中分配。
#15
顶一下
#16
久违了csdn
#17
你明白什么叫做初始化吗?
#18
这帖真好!强化了概念。
#19
那句话是反问……
#20
嗯,三楼说的很清楚明白,多谢