作者Fan383 (Fan)
看板C_and_CPP
標題[問題] 函數流程問題
時間Fri May 25 22:46:08 2012
最近在學c,有一個範例程式,是在介紹宣告變數的各種等級
程式如下:
#include <stdio.h>
void varfunction()
{
int var = 0;
static int static_var = 0;
printf("var = %d \n",var);
printf("static static_var = %d \n",static_var);
var++;
static_var++;
}
int main()
{
int i;
for ( i = 0; i < 3; i++ )
varfunction();
return 0;
}
顯示結果為:
var = 0
static_var=0
var = 0
static_var=1
var = 0
static_var=2
他主要是想介紹static的變數宣告並不會隨著函數的結束
而導致資料的消失,可是我有個問題,在副函數的部分
有這麼一行
static int static_var = 0;
那不是三次進副函數都會把stasic_var歸零嗎?
為何還能印出0,1,2
敢請指教@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 134.208.1.29
推 dendrobium:那個static的初始化只會在程式的一開始執行 05/25 22:48
→ Fan383:喔喔 請問是所有副函式的宣告部分都只會執行一次嗎? 05/25 22:51
推 dendrobium:function中的static變數都只會在程式開始時初始化 05/25 22:56
推 dendrobium:以上是C, 如果是C++的話則是在第一次執行函式的時候才 05/25 22:58
→ dendrobium:初始化 大概是這樣 05/25 22:58
→ Fan383:嗯嗯 感謝樓上 05/25 23:11
→ BombCat:C的static變數不是在compile time就初始化在obj裡了 (? 05/26 09:44