C字元陣列 0 和常量指標問題

2021-09-13 21:52:01 字數 1935 閱讀 3827

討論下面的問題前,我們先用sizeof()和strlen()測char陣列長度:

當我們定義了乙個這樣乙個陣列:

char str[10] = ;

通過sizeof(str)我們可以求得str大小為10個位元組(str記憶體分配空間大小).

通過strlen(),我們可以求的此陣列真實長度,strlen通過是否為』\0』來判斷該字串是否結束.

1.』\0』問題

定義陣列有以下幾種定義方法:

(1) char str[10] = 「hello」;

此時我們只給str陣列前5個元素賦值,剩餘5個元素系統將會自動賦值為』\0』,當賦值個數會小於陣列長度時系統都會自動新增』\0』.

(2)const char *str = 「hello」;

定義了乙個字串,str代表字串首位元素位址,此時系統也會自動在字串末尾新增』\0』.

(3)char str = ;

用此方法定義並初始化乙個陣列系統不會自動新增』\0』.

(4)char str[5] =

此時str的長度剛好==字串長度,此時系統將不會自動新增』\0』,如何陣列長度大於字串長度則會自動新增』\0』.

注意char str[5]="hello"是錯誤的寫法

因為在定義字串時,系統會自動新增』\0』,但是陣列長度 == 字串長度,因此系統無法給字串新增』\0』系統將會報錯.

#include #include int main()

;//用sizeof()為5, strlen()不確定

char str3 = ;//用sizeof()為6,strlen()為5

char str4[5] = ;//用sizeof()為5,用strlen所求結果不確定

const char *str5 = "hello"; //用sizeof()為8(乙個指標在64位機器空間大小為8),strlen()為5

printf("str1:sizeof()=%d strlen()=%d\n",sizeof(str1),strlen(str1));

printf("str2:sizeof()=%d strlen()=%d\n",sizeof(str2),strlen(str2));

printf("str3:sizeof()=%d strlen()=%d\n",sizeof(str3),strlen(str3));

printf("str4:sizeof()=%d strlen()=%d\n",sizeof(str4),strlen(str4));

printf("str5:sizeof()=%d strlen()=%d\n",sizeof(str5),strlen(str5));

}

執行結果如下:

2.const char * 和 char * const

char str1 = "hello";

char str2 = "world";

const char* p = str1;

char* const q = str2;

const char* p表達的是*p為乙個常量,常量不可改變其值,但可以改變指標指向的位址.

char * const p 表達的是指標p為乙個常量,改變指標指向的位址,但可以通過改變該位址內的值,相當於乙個陣列.

//p[1] = 'j';非法,會引起編譯器報錯

p = q;//正確,把q指向的位址賦值給p

//q = p;/錯誤,改變了q的指向位址

q[1] = 'j';//正確,改變該位址內的值

c 指標常量 和 常量指標

指標常量 指向常量的位址,不允許改變指向位址,指向位置的變數值能被改變 p不可以變 const p 常量指標 指向常量的指標,指標指向的物件不能通過這個指標來修改,可是仍然可以通過原來的宣告修改,也就是說量指標可以被 賦值為變數的位址,之所以叫做常量指標,是限制了通過這個指標修改變數的值 cont ...

C 指標常量和常量指標

首先在c 目前我看到的型別宣告方式,該變數的型別都是由最後幾個字來確定,前面是定語,修飾詞。有其他不同的歡迎指出,共同學習 比如 指標陣列 是陣列,陣列裡存的是指標。陣列指標 是指標,指標指向陣列。所以指標常量 首先是常量,然後是乙個指標,即是該指標是乙個常量,指標的值即位址不會變。常量指標 首先是...

C 指標常量 常量指標和常指標常量

1 指標常量 如果在定義指標變數時候,指標變數前用const修飾,被定義的指標變數就變成了乙個指標型別的常變數,指標型別的常變數簡稱為指標常量。格式如下 資料型別 const 指標變數 變數名 修飾符const與指標變數緊鄰,說明指標變數不允許修改,既然指標變數的值不能修改,所以一定要在定義的時候給...