define typedef const用法

c語言定義常量時有三種方式,#define,typedef和const,下面總結下這三種方式的用法:
define宏定義:本質是簡單的文本替換
#define PI 3.1415296;
由於define定義的函數不會進行類型檢查,只是在預處理時將調用宏定義中的參數進行簡單的替換而已,所以可能會造成意外的錯誤。比如常見錯誤:
#define point (int*);
point a,b;//本意是想定義兩個指針,但是實際上是int * a,b;定義了一個指針一個普通變量
define宏除了可以定義常量以外,還能定義函數,如#define max(a,b) ((a)>(b)?(a):(b)),注意在定義時要加入適當的括號,不然很容易出錯。
typedef:與define宏的不同在於編譯時期解釋,而不是預處理時期替換
用法:typedef 新類型;
如typedef int A[10]; A a;//相當於 int a[10];
分析:int A[10]本身是定義了一個變量A,但是如果使用typedef語法進行定義後,A就轉變成了一個類型,可以用於其他變量的定義。
使用typedef可以解決上述define中定義變量時遇到的問題,如:
typedef int * point;
point a,b;//此時a和b都是int*類型

const:
1、const修飾普通變量
const修飾的變量表示該變量不可修改,只能在初始化時對變量賦值,否則則不再能爲const變量賦值。
const  int a=2;
int const b;  //const和類型的位置可以互換,如果類型爲指針則不能隨意互換
b=3;//error
2、const修飾指針變量
const int *a;//修飾指向的對象(*a),*a不可變,指針a可變
int const *a;//修飾指向的對象(*a),*a不可變,指針a可變
int * const a;//修飾指針(a),a不可變,指針指向的對象*a可變
const int * const a; //指針指向的對象*a不可變,指針a不可變
但是,如果const修飾的是指向char*的指針,指針指向的內容仍舊是不能修改,因爲指針指向的是常量字符串不可修改。如char * const p; p[2]='a';     //會出現段錯誤














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