char *a是聲明瞭一個指向char型別的指標變數;此時,a並沒有被初始化,沒有被指向任何資料;所以此時scanf("%s", a)是錯誤的,a此時只是一個空指標,而且你也不能向一個指標變數中儲存非地址型別之外的資料;這就相當於:你要幫你朋友(char *a所指向的物件)買某一個型別的商品;這個商品名字叫“%s”;但是你卻沒告訴計算機怎麼聯絡(char *a所指向的物件)char *a = "hello world"; 並不是原始寫法,是一種簡化寫法,等同於:char x[] = "hello world";char *a;a = x;好處除了一句話幹了三句話的事情之外,還少用了一箇中間變數(陣列名本身就是一個指標變數)此外,最原始的C,如果你寫下:char x[] = "hello world";char y[] = "hello world";char *a = x;char *b = y;此時,a、b變數本身是獨立開的,可區分的,但是他們所指向的記憶體地址卻是一個,這是C語言的一個特性,在編譯時,會將相同的字串合併起來建立,以此來節省空間,以C為原型的一些語言,比如obj-c也保留了這個特性;
char *a是聲明瞭一個指向char型別的指標變數;此時,a並沒有被初始化,沒有被指向任何資料;所以此時scanf("%s", a)是錯誤的,a此時只是一個空指標,而且你也不能向一個指標變數中儲存非地址型別之外的資料;這就相當於:你要幫你朋友(char *a所指向的物件)買某一個型別的商品;這個商品名字叫“%s”;但是你卻沒告訴計算機怎麼聯絡(char *a所指向的物件)char *a = "hello world"; 並不是原始寫法,是一種簡化寫法,等同於:char x[] = "hello world";char *a;a = x;好處除了一句話幹了三句話的事情之外,還少用了一箇中間變數(陣列名本身就是一個指標變數)此外,最原始的C,如果你寫下:char x[] = "hello world";char y[] = "hello world";char *a = x;char *b = y;此時,a、b變數本身是獨立開的,可區分的,但是他們所指向的記憶體地址卻是一個,這是C語言的一個特性,在編譯時,會將相同的字串合併起來建立,以此來節省空間,以C為原型的一些語言,比如obj-c也保留了這個特性;