1. 程式人生 > >關於C語言中變數作用域的個人心得

關於C語言中變數作用域的個人心得

    這是本人的第一篇部落格,內容簡單總結淺陋。但這會是我寫部落格的開始,好啦!廢話不多說。。。。

    學過C語言的同學可能都知道,在C中變數都具有作用域的說法。以下是標準的解釋和案例:


    以上內容不難理解,一個函式的花括號為一個塊。若一個函式帶有形參,雖然函式的形參的宣告在函式的左花括號之前,但是他們也具有塊作用域,屬於函式這個塊。因此,在上述例項程式碼中變數 cleo和patrick都具有相同的塊作用域。那麼,在for while 這種迴圈語句塊中,變數的作用域又是咋樣的?

    以下是教科書般的解釋:





對於上述的例子我自己寫了一段程式碼來實現:


#include <stdio.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char** argv) {
	
	int i=2;
//	int j=0;
	for(int j=0;j++;j<3){
		printf("j=%d\n",j);
	}
	printf("///////////////////////////////////"); //實現分割
	printf("\ni=%d\tj=%d",i,j);
	return 0;
}

設計這段程式碼本意是看看能不能在for語句塊以外輸出j。然而,編譯都沒通過。以下是錯誤資訊:


[Error]name lookup of 'j' changed for OSI 'for' scoping  大致意思是  查詢name為j的變數超出了OSI的‘for’的範圍。

嗯~~,所以我又小小的改變了一下我的程式碼:

#include <stdio.h>


/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int main(int argc, char** argv) {
	
	int i=2;
	int j=0;
	for(j;j++;j<3){
		printf("j=%d\n",j);
	}
	printf("///////////////////////////////////");
	printf("\ni=%d\tj=%d",i,j);
	return 0;
}

編譯和執行一下:



能執行成功!!但是好像沒打印出for語句塊內的printf語句,嗯~這個問題留在下次。但是問題看來還真是作用域的問題。

好啦!!!