在學習數組的時候,我們了解了字符串的定義,我們可以定義一個字符數組,用來存放一個字符串,例如:
char array[] = {"abcde"};
char buf[]={"韋凱峰 Linux C/C 零基礎編程教程!\n"};
char buf1[]={"Linux系統編程\nOpenwrt系統開發\n\n"};
char tmp[]={"xxx\n"};
那麼,學習了指針,我們可以定義一個char類型的字符指針變量,字符指針變量存放字符串的地址,那麼,字符指針變量指向字符的地址。例如:
可以看到,定義了字符指針變量pstr,并且把 array[] 數組的首地址賦給該指針變量,然後,輸出pstr指針變量指向的字符串。
也可以把一個字符串常量,賦給字符串指針。程序測試代碼如下:
可以看到,我們定義了char類型的指針變量,然後,可以直接把字符串常量賦給字符指針變量。那麼,字符指針變量就存放字符串常量的首地址。
所以,可以輸出字符指針變量指向的字符串常量。
2 字符串常量操作異常在定義字符串的時候,有如下的形式:
char array[] = "abcde";
定義了字符數組array[ ],存放字符串數據。如下的形式,是定義一個指針,直接指向一個字符串:
char* p1 = "www123"; //把字符串常量賦給指針變量p1
定義字符串指針p1,指向字符串常量。
那麼,array[ ]字符數組中存放的數據是普通的字符數據,可以修改。但是,字符指針p1指向的地址,是存放“字符串常量”,是不允許修改。
程序測試例子如下:
程序運行結果如下:
可以看到,執行 array[3] = 'A' 是正确的操作。但是,執行 p1[3] = 'A'的時候,就提示了Segmentation fault錯誤,是内存段錯誤。
因為,字符串指針p1指向的是字符串常量,字符串常量中的字符是常量,不可以被修改。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!