天天看點

一個例子說明C語言中代碼塊作用域、函數作用域、函數原型作用域、檔案作用域的差別

直接上代碼,編譯環境VIsual C++

#include<stdio.h>

         int q;//q具有檔案作用域,此處為檔案作用域開始

//變量m具有函數原型作用域,從變量定義處一直到變量聲明的末尾,也就是局限在小括号()内,也可以不用變量名q,隻用int*告訴編譯器參數類型,

//如果加名字的話,也可以用int*m等别的名字,可以不與函數定義中的名字p相同

void fun(int*m);

int main(void)

{

    //函數作用域開始,本質屬于代碼塊作用域

    int i=10;

 q=20;

 printf("Before change ,i=%d\n",i);

 fun(&i);

    printf("After change ,i=%d\n",i);

 printf("Global Variable q=%d\n",q);

    for(int j=0;j<5;j++)//複合語句作用域開始,本質屬于代碼塊作用域

 {

  int m=0;

  printf("j=%d\n",j);

 }//複合語句作用域結束

 return 0;

    //函數作用域結束

}

void fun(int*p)

{//形參變量p函數作用域開始,本質屬于代碼塊作用域

 *p=30;

 //形參變量p函數作用域結束

}

//全局變量q的檔案作用域結束

編譯後結果如下

一個例子說明C語言中代碼塊作用域、函數作用域、函數原型作用域、檔案作用域的差別

繼續閱讀