關於C語言中變數作用域的個人心得
阿新 • • 發佈:2018-11-28
這是本人的第一篇部落格,內容簡單總結淺陋。但這會是我寫部落格的開始,好啦!廢話不多說。。。。
學過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語句,嗯~這個問題留在下次。但是問題看來還真是作用域的問題。
好啦!!!