上面程式碼的意思難道不是,把字串的首地址賦值給c陣列的首地址?char *c; c="i love u ";都是對的呀,兩個道理一樣呀。
回覆列表
-
1 # 薛定諤的貓xx
-
2 # EXCEL進階課堂
因為沒有看到你的程式碼,我根據其它小夥伴犯錯的提問來進行了反演。你的問題應該出現了這種情況。
上面能正確執行。
這個為什麼不能正確執行?
問題本質是:把一個字串的首地址給一個指標變數正確,為什麼給一個數組名就不正確?(一)指標不出錯情況
指標就是用存放地址的,可以用它指向一個儲存區域。
char *ch1; // 表示定義一個指向字元型儲存單元的指標
ch1="i love you"; //表示將字串的首地址放到指標ch1中,於是指標ch1指向了字串的第1個元素。
這種情況是合法的,沒有任何問題。
(二)陣列出錯情況
陣列是一段連續的儲存區域,這段區域的在內容中分配出來以後,就固定下來了,不能再發生改變。
char ch[20]; //表示定義一個長度為20的字元陣列
所從周知,陣列名代表了一個數組的首地址。陣列的首地址,就是陣列當中0號元素的地址。所以,陣列首地址可以用兩種方式進行表示。
第一種方式: ch
第二種方式:&ch[0]
而陣列定義後,首地址不能發生改變,所以首地址是一個常量值。所以,ch或是&ch[0]都是一個常量。
ch="i love you";//這條語句想把字串的首地址放到陣列名ch中,而ch是一個常量,給常量賦值是一種錯誤行為,故而程式報錯。
問題總結:題主的探究精神值得肯定,需要加強思辯能力其實遇到這種情況以後,除錯工具都會給出錯誤提示,對於這些錯誤提示,稍加分析就可以明白了。
以上便是嚴Sir課堂對於這個問題的回答。
沒看到程式碼,大概能懂你問得什麼意思。
陣列在定義的時候就已經分配了空間,所以是陣列的空間裡存了字串的內容。
指標變數在定義的時候只給指標變數自己本身分配空間,但是並沒有給具體的指向分配空間,比如char *c;這是在給c指標變數分配空間,如果是32位的編譯器就是4位元組。
指標變數的本質就是記憶體中的地址,你把具體的字串賦值給地址肯定就出錯了。其次,你這個字串是字串常量,儲存在記憶體的資料區中,你可以char *c="hello"hello;這樣表示的是指標變數c指向了字串常量,並不是將字串賦值給指標變數。