學習筆記之13 指標和字串

2022-08-11 07:24:13 字數 2231 閱讀 2543

乙個字串由乙個或多個字元組成,因此我們可以用字元陣列來存放字串,不過在陣列的尾部要加上乙個空字元'\0'。

char s = "mj";

上面的**定義了乙個字元陣列s來儲存字串"mj",系統會自動在尾部加上乙個空字元'\0'。

記憶體分布大致如右圖所示:

指標和陣列的關係非常密切,因此也可以使用指標來操作字串。

1 //定義乙個指標p

2 char *p;

3 4 //定義乙個陣列s存放字串

5 char s = "mj";

6 7 //指標p指向字串的首字元'm'

8 p = s; //或者 p = &s[0];

9 10 for (; *p != '\0'; p++)

執行完第8行後,記憶體分布如右圖:

有了前面指標與陣列的基礎相信大家能看到第10行之後的**了:每次遍歷之前先判斷p當前指向的字元是否為空字元\0,如果不是空字元,就列印當前字元,然後執行p++讓指標p指向下乙個字元元素。

最後的輸出結果:

從前面可以看出,指標確實可以指向字串並操作字串。不過前面的做法是:先定義乙個字串陣列存放字串,然後將陣列首位址傳給指標p,讓p指向字串的首字元。

1 #include 

2 3 intmain()

4

注意第6行,我們直接用指標s指向了字串"mj",並沒有先建立乙個字元陣列。看第9行,將指標s傳入到strlen函式中,說明之前所學習的字串處理函式依然可以正常使用。輸出結果:

size_t     strlen(const char *);

strlen函式中的形參是指向字元變數的指標型別,在《10-字元和字串常用處理函式》中可以將乙個字元陣列名傳進去,這一點又說明了指標與陣列的密切關係,肯定有jq。其實,呼叫strlen函式時,傳乙個位址給它就行了,它會從這個位址開始計算字元的個數,直到遇到空字元'\0'位置,因此傳入指標變數或者陣列名都可以。

其他字串處理函式也是一樣的:

1 char    *strcpy(char *, const char *); //字串拷貝函式

2 char *strcat(char *, const char *); //字串拼接函式

3 int strcmp(const char *, const char *); //字串比較函式

它們的引數都是指向字元變數的指標型別,因此可以傳入指標變數或者陣列名。

因此printf函式依然可以正常使用:

char *s = "mj";

printf("%s", s);

輸出結果:

char *s;

s = "mj";

上面的指向方式也是正確的:先定義指標變數,再指向字串。如果是字元陣列就不允許這樣做,下面的做法是錯誤的:

1 char s[10];

2 s = "mj";

編譯器肯定報第2行的錯,因為s是個常量,代表陣列的首位址,不能進行賦值運算。

還需要注意的是,下面的做法也是錯誤的:

1 char *s = "mj";

2 3 *s = "like";

第3行**犯了2個錯誤:

現在想將字串"lmj"的首字元'l'改為'l',解決方案是多種的

1 //定義乙個字串變數"lmj"

2 char a = "lmj";

3 4 //將字串的首字元改為'l'

5 *a = 'l';

6 7 printf("%s", a);

程式正常執行,輸出結果:

1 char *p2 = "lmj";

2 *p2 = 'l';

3 4 printf("%s", p2);

看起來似乎是可行的,但這是錯誤**,錯在第2行。首先看第1行,指標變數p2指向的是一塊字串常量,正因為是常量,所以它內部的字元是不允許修改的。

有人可能搞蒙了,這裡的第1行**char *p2 = "lmj";跟第一種方案中的第2行**char a = "lmj";不是一樣的麼?這是不一樣的。

Day 13 指標與字串 指標與函式

指標與字串 一 陣列存放字元 c語言中沒有特定的字串型別,我們通常是將字串放在乙個字元陣列中,例1 1 字元陣列歸根結底還是乙個陣列,上節講到的關於指標和陣列的規則同樣也適用於字元陣列 例1 2 二 字元指標 除了字元陣列,c語言還支援另外一種表示字串的方法,就是直接使用乙個指標指向字串,例如 ch...

3 25指標與字串

建立與輸出 char str 10 hellow cout str 建立乙個指向字串的指標 c 11並不建議這樣使用 char p str 10 hellow cout p str 系統會認為這是乙個指向字元常量的字串指標,這種不允許修改的 一般使用 char p str 建立乙個char型別的指向...

34 指標與字串

1 字串指標 在c語言中,可以用兩種方法訪問乙個字串 1 字元陣列 char string i love china printf s n string 說明 和前面介紹的陣列屬性一樣,string是陣列名,它代表字元陣列的首位址。2 字串指標指向字串 char 變數名 字串內容 對指向字元變數的指...