指標和字串常量
首先比較兩段**
**1
char ch1 = "hello";
*ch1 = 'h'; //ok
ch1[0] = 'h'; //ok
printf("%s\r\n",ch1);
**2
char *ch2 = "world";
*ch2 = 'w'; //執行時錯誤
ch2[0] = 'w'; //執行時錯誤
printf("%s\r\n",ch2);
這裡的「world」是字串常量,而「hello」不是。
**2裡,*ch2和ch2[0]其實就是指『w』,而『w』是常量自然無法修改!
一般定義成const char * = 「world」;
避免上述執行時的錯誤。
如果想修改字串的值,就應該定義成**1的形式!或者如下在堆上申請:
char *s = (char *)malloc(sizeof(char)*6);
strcpy(s, "hello");
s[0] = 'h';
printf("%s\r\n", s);
這個「hello」也不是乙個字串常量,因為是在堆上申請的,也可以用指標來讀和寫! 指標和字串常量
在閱讀c和指標這本書,才發現自己一直對於字串常量的概念不夠清晰。字串常量可以說是乙個指標,char pathname usr temp xx strcpy pathname 10,abcde printf s n pathname 像這3條語句其實是非法的,因為pathname 是乙個指向char型...
C C 字串常量 字元陣列和字元指標
通常,如果在程式中定義了乙個字串,那麼為了節省記憶體,會把相同的字串儲存到乙個單獨的 相同的位置,此時如果用多個字元指標指向它,那麼指標的值會相同。常量字串位於c c 的文字常量區,在程式結束以後由系統釋放。char p string1 example char p string2 example ...
C C 字元陣列 字元指標和字串常量
c 有兩種處理字串的方式,除了沿用c風格字串,另一種方法是借助用string class庫。字串是一系列儲存在連續記憶體位元組中的字元 每個字元對應乙個位元組 所以可以將字串儲存在字元陣列中。以下四種宣告方式都是字元陣列,但是只有第乙個不是字串,其中無效字元 null character 0 其在機...