首頁>Club>
上面程式碼的意思難道不是,把字串的首地址賦值給c陣列的首地址?char *c; c="i love u ";都是對的呀,兩個道理一樣呀。
7
回覆列表
  • 1 # 薛定諤的貓xx

    沒看到程式碼,大概能懂你問得什麼意思。

    陣列在定義的時候就已經分配了空間,所以是陣列的空間裡存了字串的內容。

    指標變數在定義的時候只給指標變數自己本身分配空間,但是並沒有給具體的指向分配空間,比如char *c;這是在給c指標變數分配空間,如果是32位的編譯器就是4位元組。

    指標變數的本質就是記憶體中的地址,你把具體的字串賦值給地址肯定就出錯了。其次,你這個字串是字串常量,儲存在記憶體的資料區中,你可以char *c="hello"hello;這樣表示的是指標變數c指向了字串常量,並不是將字串賦值給指標變數。

  • 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課堂對於這個問題的回答。

  • 中秋節和大豐收的關聯?
  • 說話說不清繞舌頭跟什麼有關係?