C語言入門第十五篇,作用域

我也不知道什麼時候該講這個問題,其實覺得一開始就應該講這個問題,但又覺得不太形象,所以我決定函數講完後就應該讓大家瞭解一下作用域的問題。
概述
當變量或者函數等聲明時,它只有在程序的一定區域才能被訪問。這個區域就是這個函數或者這個變量的作用域。
我們以下列代碼來講述作用域的問題:

#include<stdio.h>

int a;
void swap(int &d,int &e);
int  largest_common_divisor(int b,int c);
int Least_common_multiple(int d,int e);

void swap(int &d,int &e)
{
    int temp=d;
    d=e;
    e=temp; 
}

int  largest_common_divisor(int b,int c)
{
    int temp;
    if(b<c)
    {
        swap(b,c);
    }
    while(b%c!=0)
    {
        temp=c;
        c=b%c;
        b=temp;
    }
    return c;
} 

int Least_common_multiple(int d,int e)
{
    int sum=d*e;
    return sum/largest_common_divisor(d,e);
}

int main()
{
    int x,y;
    scanf("%d%d",&x,&y);
    printf("最大公約數爲%d\n",largest_common_divisor(x,y));
    printf("最小公倍數爲%d\n",Least_common_multiple(x,y));
    return 0;
}

這個程序是實現輸入兩個數求最大公約數和最小公倍數。這裏主要討論作用域的問題。
第三行的int a,在所有代碼以外,是全局變量。也就說在下面的所有代碼塊中都可以對它進行賦值等等的操作。
而函數中聲明的變量和函數的形參,都只在函數本身塊中使用,超過函數本身變量就失效了
大家可以自行體會一下這段程序以及變量的作用域。
函數同樣也有作用域,如果我不在最前面寫下下面的內容,函數的調用也可以能有問題。

void swap(int &d,int &e);
int  largest_common_divisor(int b,int c);
int Least_common_multiple(int d,int e);

在上一章我講了函數的聲明方式,他其實類似變量,如果我沒有上面這一段函數聲明(一般在開發中這些聲明是放在自定義的頭文件裏的),又恰巧我把最大公約數(largest_common_divisor)和最小公倍數(Least_common_multiple)的函數對調一下的話,編譯器就會報錯說不知道最大公約數這個函數(未定義),所以作用域這個問題也是不可忽略的。
總結
本章介紹了變量和函數的作用域問題,其實覺得自己寫的不是太好,但是自己也沒有想到太好的例子來講這個東西,所以我們就先這樣提一下,有這個意識,後面大家就會去注意這個問題了。

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