指標與字串
文章推薦指數: 80 %
在〈字元陣列與字串〉談過C 風格字串,本質上就是個字元陣列,而陣列名稱具有指標性質,那可以如下建立字串嗎? char *text =
回C語言目錄
在〈字元陣列與字串〉談過C風格字串,本質上就是個字元陣列,而陣列名稱具有指標性質,那可以如下建立字串嗎?
char*text="hello";
gcc沒提出任何警訊,然而text儲存了字串常量的位址值,字串常量建立的內容是唯讀的,如果試圖透過text改變字元,會發生不可預期的結果:
char*text="hello";
text[0]='H';//不可預期
因此對於字面常量,建議加上const:
constchar*text="hello";
如此一來,試圖透過text改變字元,編譯器會失敗,從而避免了執行時期的錯誤。
上述方式中,text只是個型態為constchar*的指標,是與以下不同的,底下建立的text內容並不是唯讀的,因為text是個陣列,text是將"hello"複製至各索引處:
chartext[]="hello";
對於wchar_t等其他為了支援Unicode的型態,都有這類特性。
然而,無論是哪個形式,都可以傳遞位址,例如:
chartext1[]="hello";
constchar*text2="hello";
constchar*text=text1;//OK
text=text2;//OK
不過,底下不行:
chartext1[]="hello";
constchar*text2="hello";
char*text=text1;//OK
text=text2;//error:invalidconversionfrom'constchar*'to'char*'
錯誤該行如果真的想通過編譯,就必須明確告訴編譯器,你要去除const修飾:
chartext1[]="hello";
constchar*text2="hello";
char*text=text1;//OK
text=(char*)text2;//強制去除const
會需要這麼做的情況,可能是在使用一些舊的函式,它們在參數上宣告的是char*,而不是constchar*。
那麼,如何建立字串陣列呢?
#include
可以透過typedef為constchar*建立別名,令字串陣列的建立易讀、易寫一些:
#include
延伸文章資訊
- 1第7 章陣列與指標
含結束字元), 有時候程式要讓使用者輸入一. 些資料, 接著要檢查使用者輸入的字元數,. 就會用到可計算字串長度的strlen() 函式。 呼叫此函式時需以字串(字元陣列) 為參數,.
- 2【c】指向字串的指標陣列 - 程式人生
在C語言程式設計中,我們不能用scanf()函式來獲取指標陣列的值,但是 ... 輸入作為程式,我認為它是儲存輸入,但它正確地列印輸出作為給定的輸入。
- 3【Day 26】指標介紹(下) - iT 邦幫忙::一起幫忙解決難題
因為 [] 的優先順序大於 * ,表示這個陣列元素(有三個),都指向某個特定的資料型態( int ),我們稱他為指標陣列。 來看一段程式碼: #include<stdio.h> ...
- 4指標與字串
在〈字元陣列與字串〉談過C 風格字串,本質上就是個字元陣列,而陣列名稱具有指標性質,那可以如下建立字串嗎? char *text =
- 5C++教學(二十一):指標陣列 - 痞客邦
C++教學(二十一):指標陣列指標即然也是變數的一種,有時為了集合資料與處理上的方便,我們也可以使用陣列的方式來管理指標 ... cout 輸入Array維度:;