字符串字面量,又叫字符串常量(string constant)
字符串常量屬於靜態存儲類型(static storage class),被雙引號括起來的內容被視爲一個指向字符串存儲位置的指針,類型於數組名作爲數組的地址
tips:
- 用雙引號括起來的字符串可以被視爲一個指針
- 如果兩個字符串中間沒有間隔或只有空格,那將被視爲串聯起來的一個字符串
- 數組的元素如果未被使用,會被自動初始化爲null character(’\n’)
- 數組名爲常量,可被視爲字符串的首地址;但數組的元素是變量。指針名是變量(聲明爲 const 時另算)
- 遞增遞減(++x;–x)只能用於變量,不能是不可修改的常量
- 字符串初始化數組的時候,有兩個存儲地點,一個在靜態存儲區中,一個在數組中
- 如果打算修改字符串,不要使用指針,因爲它無法被改變
- 記住,要爲定義的指針初始化,不然指針可能會指向任何地方
例:
#include<stdio.h>
int main(void)
{
char coco[]="hello, this"" is a" "detail!"; //可以讓編譯器爲我們計算數組的大小
puts(coco); // puts 函數會自動添加一個換行符
char *cho = "Gets function was delete in the new standard."; //這個其實就是 const char *cho,只是編譯器默認可以這麼寫,所以指針指向的內容不能被改變
printf("%s %c\n","Now,you could use it.", *"Now,you could use it."); //被雙引號括起來的內容被視爲一個指針,指向字符串的首地址
coco[12] = 'z'; // cho[12]='z'是不行的,前面說過,這是錯誤的.
fputs(coco, stdout); // fputs函數一般和fgets函數(puts函數)配用,但兩者的區別在於會不會爲打印輸出的字符串自動加上一個換行符
printf("\n"); // fputs函數不會自動加上換行符,所以這裏加上
printf("%p %p", cho, "Gets function was delete in the new standard."); //這兩個形式都是相同的,指針指向了字符串的首字符的地址
return 0;