C語言的字元指標變數和字串陣列的區別

2021-08-27 18:52:06 字數 1991 閱讀 7395

本博文的**基於vc++6.0開發除錯;

本博文概念比較多,屬於學習筆記型別;

賦值方式:可以對字元指標變數賦值,但是不能對陣列名賦值;

字元指標變數的賦值方式:

#include

void main()

執行結果:

可以乙個其他的結論:雖然在程式中,我們並沒有定義乙個字串陣列,但是實際上,編譯器確實為「i love china!」這個沒有字串名的字串開闢了記憶體空間,並用指標a指向起始位址;

3.從初始化含義上

char *a = "i love china!";  //對於字元指標變數初始化;

/*等價於:

char *a;

a = "i love china!";

注意:字元指標變數賦的字串是乙個常量,是不能改變的;而字元陣列的元素是可以改變的;

*/char

str[30] = "i love china!"; //對陣列的初始化;

/*但是:

char str[30];

str = "i love china!";

*/

4.從儲存單元的內容和大小來說:

不管什麼資料型別的指標變數,vc++編譯器都為其分配4個位元組的儲存空間,用來儲存位址,而字元陣列的儲存空間是根據資料型別的不同而不同,vc++為字元陣列分配每個字元乙個位元組的空間(字串陣列的還有乙個結束識別符號);

注意:當定義乙個指標變數後,應當及時對其進行賦值操作,因為未初始化的定義指標變數,指標的指向是隨機的,它可能會指向記憶體中的空白區,也同樣有可能指向記憶體中的資料儲存區,若不及時對指標變數進行賦初值,一旦進行賦初值操作,可能會破壞電腦軟體,系統等,相當危險;乙個可採取的操作如下;

char *a = null; //null代表空,即a被初始化指向空位址;
5.從值的可變性來說:

指標變數的值是可以改變的,無非就是位址的改變;

陣列名的值是不能改變的,它只能指向本陣列的首元素位址;

6. 陣列元素的引用:

字元陣列可以用下標法

str[1];
*(str+1);
字元指標可以用指標變數帶下標法

p

[1]; //效果和上面str[1]一樣;

*(p+1); //注意:如果指標變數並不是指向陣列,則不能用這種方法;
7.從指向的內容值的角度看:

字元陣列內的元素,都是變數,值是可以改變的;

但是字元指標陣列內的元素的值並不是變數而是常量,常量不能發生改變;例如:

#include 

void main()

執行結果:

編譯器在這裡並沒有報錯,但是結果並沒有正確輸出,那麼如果注釋掉p[2] = 『w』;錯誤將不會出現;那麼就說明,此處或許不是語法上的錯誤,而可能是邏輯上的錯誤;需要注意;

8.指標字串的乙個特殊功能:代替printf()函式的格式控制函式(可變格式輸出函式),例如:

#include 

void main()

執行結果:

C語言指標 字串和指標

字元指標可以指向字元變數,但在實際應用中,我們常常會用到字串,而字串也是可以用字元指標指向的,但根據字串的不同儲存方式主要分為字串常量和利用字元陣列儲存的字串變數,兩者有不同的定義和使用形式 字元指標可以用來儲存字串常量的首位址 例如 char ptr my name is 此時,字串常量在記憶體中...

C語言 字串指標(指向字串的指標)

字串一旦被建立就存在於常量池中。以字元陣列形式建立的字串,實際上是從字串常量池中複製了乙個副本,所以修改字元陣列的內容時,只是修改的自己的副本,並不會影響到常量池中的字串。而對字串指標strp操作時會影響到常量池中的字串 char strc string char strp string print...

C語言 字串 指標

字串 1.字串 jack j a c k 0 用陣列儲存字串 char name 10 jack printf name 2.字串的一些定義 都是字串 0的ascii碼值是0 char name 8 it char name2 8 char name3 8 0的ask碼是0 char name4 8...