猜猜結果是什麼?

#include <stdio.h>
int func(void)
{
	static int counter = 1;
	return ++counter;
}
int main()
{
	int anwser;
	anwser = func() - func()*func();
	printf("%d\n",anwser);
	getchar();
	return 0;
}

在func()函數內,我們定義了靜態變量counter,初始化值爲1.

靜態局部變量有以下特點:
(1)該變量在全局數據區分配內存;
(2)靜態局部變量在程序執行到該對象的聲明處時被首次初始化,即以後的函數調用不再進行初始化;
(3)靜態局部變量一般在聲明處初始化,如果沒有顯式初始化,會被程序自動初始化爲0;
(4)它始終駐留在全局數據區,直到程序運行結束。但其作用域爲局部作用域,當定義它的函數或語句塊結束時,其作用域隨之結束。

接着看這個問題。我們首先想到的可能是-10,但這因編譯器而異。在VS2013與VC6.0中都是-10,乘法運算的優先級必然是大於減法運算的。但並沒有規則規定函數調用的順序。所以說(2-3*4)or(2-4*3)、(3-4*2)or(3-2*4)、(4-3*2)or(4-2*3)結果都有可能是對的。
(圖爲在VS2013下運行結果)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章