const關鍵字

// 時間 2012.7.31 數組

// 目的 1.說明 const char **p0 與 char **p1  類型不符 spa

//      2.說明 DAN SAKS闡述的問題 指針

//  r-read,rw-read、write 對象

 

f(const char **p) ci

{} it

 

// main(int argc,char *argv[]) io

main(int argc,char **argv) test

{ 變量

typedef int * PINT; gcc

char c0;

const char c1=1;    // c1—r

char const c2=2;    // c2—r    

//此種寫法在聲明指針變量時,有利於快速理解const修飾的對象

 

char *a0;           // a0—rw,*a0—rw

 

const char *a1;     // a1—rw,*a1—r

char const *a2;     // a2—rw,*a2—r

// 兩種等價,第二種寫法在聲明指針變量時,有利於快速理const修飾的對象,也有利於避免使人疑惑的語法規則

char * const a3;          // a3—r,*a1—rw

char const * const a4;    // a3—r,*a1—r

 

const char **p1;    // p1—rw   *p1—rw   **p1—r

char const **p2;    // p2—rw   *p2—rw   **p2—r

// 兩種等價,第二種寫法在聲明指針變量時,有利於快速理const修飾的對象

 

char * const *p3;   // p3—rw   *p3—r    **p3—rw

char ** const p4;   // p4—r    *p4—rw   **p4—rw

 

const PINT array0[10];   // 指針數組   (array0[i])—r,*(array0[i])—rw   

//等同於  PINT const array0[10];  亦即 int * const array0[10];

const int *array1[10];   // 指針數組   (array1[i])—rw,*(array0[i])—r

//等同於  int const *array1[10];

// 1.都是指向有限定符的相容類型的指針  2.無限定符的相容    // 類型的指針,左邊指針所指向的類型必須具備右邊

// 指針所指向類型的所有限定符——摘自C標準手冊。故類賦 // 值合法

a0=&c0;    // 左右同樣

a1=&c0;    // 左比右多

a1=&c1;    // 左右同樣

a1=&c2;    // 左右同樣

           

 

a1 = a0;   // 左右同樣

// a0 = a1;   // 右比左多

 

p1  = &a0; // 左比右多   p1指向 count char*  &a0爲char* 類型不符

*p1 = a1;  // 左右同樣

*p1 = &c0; // 左比右多

*p1 = &c1; // 左右同樣

// *p1 = &a0; // E:\C\TEST\sizeof_test.c(47) : warning C4047: '=' : 'const char *' differs in levels of indirection from 'char ** '

// **p1 = c0; // E:\C\TEST\sizeof_test.c(48) : error C2166: l-value specifies const object

 

 

p3   = &a0;

**p3 = c0; // 左右同樣

**p3 = c1; // 左右同樣

 

 

*p4 =  a0;  // 左右同樣

*p4 =  &c0; // 左右同樣

**p4 = c0;  // 左右同樣

 

 

// f(argv);   //此處調用,類型不符。argv 存儲char型指針的地址,p 只能存儲const char型指針的地址

           // VC6.0檢測不到,gcc能夠檢測到此類錯誤

}

相關文章
相關標籤/搜索