1.const定義常量
在C語言中,const可以用來定義的一個常量,在變量名前加上const即可。
int const a;
定義了一個a的整數常量,且a的值不能被修改。如果要修改a的值,有以下兩種方法。
方法一
int const a=100;
在定義時,就對它進行初始化
方法二
在函數中聲明const的形參在函數調用時會得到實參的值。
重點:const涉及指針變量的情況
const int * a;
int * const a;
在第一條語句中,const修飾的時指針a所指向的對象,也就是說我們無法同過指針a來修改其指向的對象的值。但是指針a本身的地址是可以改變的,既可以指向其他對象。
第二條語句中,cosnt修飾的指針a。因此,指針本身(地址)是不可以改變的,而指針所指向的對象的值是可以改變的。
2.define定義常量
define實際是一個預處理指令,其用途遠大於定義常量這一功能。這里只介紹define定義常量的基本用法。
使用define實際是進行符號替換,方法為
#define 符號名 替換列表
符號名必須符合標識符命名規則。替換列表可以是任意字符序列,如數字,字符串,表達式等。列如:
#define MUN “work hard!”/*后面的所有的MUN都會被替換為work hard!*/
#define AUS 99 /*后面的所有的AUS都會被替換為99!*/
#define DEPP “\a” /*后面的所有的DEPP都會被替換為“\a”!*/
習慣上,經常用大寫字母來命名符號位,而用小寫字母來命名變量
注意:我們在用#define的時候,千萬記得不要在末尾加“;”,很多初學者些代碼時習慣在每句代碼后面加“;”。這里要小心。
3.作用域
定義:程序中可以訪問一個指示符的一個或多個區域,既變量出現的有效區域,決定了程序的那些部分通過變量名來訪問變量。一個變量根據其作用域的范圍可以分為函數原型作用域,局部變量和全局變量。
1).函數原型作用域,其作用域始於“(”,結束於“)”。
如下列原型聲明:
double Area(double radius);
radius 的作用域盡在於此,不能用於程序正文其它地方,因而可以省略。
2).局部變量
在函數內部定義的變量稱為局部變量。局部變量僅能被定義該變量的模塊內部的語句所訪問。換言之,局部變量在自己的代碼模塊之外時不可見的。
對於局部變量,要注意的是,它們僅存在於。定義改變量的執行代碼塊中,即局部變量在進入模塊時生成(壓入堆棧),在退出模塊時消亡(彈出堆棧)。定義局部變量的最長見的代碼塊時函數,代碼如下:
/*在函數內聲變量*/
void function1(){
int x=10;
}
void function2(){
int x;
x=20;
}
整數變量x被定義了兩次,一次在function1中,另一次在function2中,function1和function2中的x互不相關,原因是每個x作為局部變量僅在被定義的模塊內可見。
3).全局變量
與局部變量不用,全局變量貫穿整個程序,它的作用域為源文件,可被源文件中的任何一個函數使用。他們在整個程序執行期間保持有效。示例代碼:
#include <stdio.h>
int a,b;//全局變量
void function1(){
}
float x,y;
void function2(){
}
int main(int argc,char * argv[])
{
return 0;
}
得出結論:上例中定義了a,b,x,y都是在函數外部定義的外部變量,都是全局變量。x,y是在function1之后,在function1內沒有對x,y聲明,所以他們在function1中無效,a,b定義在源程序最前面,因此在function1,function2,main內不加聲明就可以使用。
對於全部變量有以下幾點需要說明。
(1)對於局部變量的定義和聲明,可以不加區分,而對於全局變量則不然。全局變量的定義和全局變量的聲明並不是一回事,全局變量定義必須在所在的函數之外,且只能定義一次,其一般形式為
[extern] 類型說明符 變量名,變量名.....
其中extern可以省去不寫,例如:
int a,b;等效於extern int a,b;
而全局變量聲明出現在要使用改變量的各個函數內。在整個程序內,可能出現多次。全局變量在定義時就已經分配了內存單元,並且可做初始賦值。全局變量聲明不能在賦予初值,只是表明在函數內要使用某外部變量。
(2)外部變量可加強函數模塊之間的數據聯系,但是又使函數要依賴這些變量,因而使得函數的獨立性降低。從模塊化程序設計的觀點來看這是不利的,因此在不必要時盡量不要使用全局變量。
(3)全局變量的內存分配是在編譯過程中完成的,它在程序的全部執行過程中都要占用儲存空間,而不是僅在需要時才開辟儲存空間。
(4)在同一源文件中,允許全局變量和局部變量同名。在局部變量的作用域內,全局變量不起作用。因此,若在改函數中想要使用全局變量,則不能在定義一個同名的局部變量。
(5)全局變量的作用域可以通過關鍵字extern擴展到整個文件或其他文件。