乙個字串由乙個或多個字元組成,因此我們可以用字元陣列來存放字串,不過在陣列的尾部要加上乙個空字元'\0'。
char s = "mj";上面的**定義了乙個字元陣列s來儲存字串"mj",系統會自動在尾部加上乙個空字元'\0'。
記憶體分布大致如右圖所示:
指標和陣列的關係非常密切,因此也可以使用指標來操作字串。
1 //定義乙個指標p執行完第8行後,記憶體分布如右圖: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++)
有了前面指標與陣列的基礎相信大家能看到第10行之後的**了:每次遍歷之前先判斷p當前指向的字元是否為空字元\0,如果不是空字元,就列印當前字元,然後執行p++讓指標p指向下乙個字元元素。
最後的輸出結果:
從前面可以看出,指標確實可以指向字串並操作字串。不過前面的做法是:先定義乙個字串陣列存放字串,然後將陣列首位址傳給指標p,讓p指向字串的首字元。
1 #include注意第6行,我們直接用指標s指向了字串"mj",並沒有先建立乙個字元陣列。看第9行,將指標s傳入到strlen函式中,說明之前所學習的字串處理函式依然可以正常使用。輸出結果:2 3 intmain()
4
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是個常量,代表陣列的首位址,不能進行賦值運算。2 s = "mj";
還需要注意的是,下面的做法也是錯誤的:
1 char *s = "mj";第3行**犯了2個錯誤:2 3 *s = "like";
現在想將字串"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行。首先看第1行,指標變數p2指向的是一塊字串常量,正因為是常量,所以它內部的字元是不允許修改的。2 *p2 = 'l';
3 4 printf("%s", 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 變數名 字串內容 對指向字元變數的指...