#include <stdio.h>void fn(){? ? static int x = 1; ? //定義靜態局部變量? ? x*=2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? printf("x=%d\n",x); ? ??}int main(){? ? int i;? ? for(i=0;i<5;i++)? ? {? ? ? ? fn(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這里什么意思???為什么會出現那樣的結果????????????????????????????????????????????????????????????????為什么刪除啦上面的x*=2答案就會全變成1!? ? }? ? extern int x; ? ? ?//調用外部變量? ? printf("x=%d\n",x);? ? getchar();}int x=100;
3 回答
已采納

ruibin
TA貢獻358條經驗 獲得超213個贊
你可以把靜態變量理解為掛載車子外面的東西。函數調用完畢后會清理局部變量,就像車子用完之后我們清理一下車子內部。但是,由于靜態變量是掛在車子外面的,所以不會被清理。也就是說static int x = 1;就像定義在外面的int x = 1;差不多,不過外部不能訪問。 ?以后你理解內存泄露,閉包哪些東西就懂了?,F在就記住行了。

ruibin
TA貢獻358條經驗 獲得超213個贊
#include <stdio.h>
int x = 1; ? //定義靜態局部變量
void fn()
{
? ?
? ? x*=2; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? printf("x=%d\n",x); ? ??
}
int main()
{
? ? int i;
? ? for(i=0;i<5;i++)
? ? {
? ? ? ? fn(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? }
? ? extern int x; ? ? ?//調用外部變量
? ? printf("x=%d\n",x);
? ? getchar();
}
//int x=100;
結果一樣。
- 3 回答
- 0 關注
- 1527 瀏覽
添加回答
舉報
0/150
提交
取消