1樓:陌歸
a[i]代表一維陣列中下標為i的元素。
假如你定義了乙個a[5],呼叫的時候用的a[5]是越界訪問的下標為5的元素(因為事實上陣列a[5]的下標值只到4)……不是整個陣列。
只有在定義的時候a代表陣列。
2樓:薛非
先定義int ages[5];或int ages[ ];
再乙個乙個賦值是可以的,這不可能。
請如實描述問題,
沒有人能回答虛假的問題。
3樓:
如果你在定以後陣列再用"="賦值,這個"="運算子只做一件事情就是把右邊那貨的位址給左邊這貨。這條語句執行結果不是乙個物件(或者根本沒法執行),沒有單一的位址,只是會在定義的時候會被按照特殊規則解釋的語句。
編譯器在執行到"ages=;"的時候嘗試去先執行"="右邊的語句,發現這貨的結果不是我要的指標(或者是我不認識右邊這貨,除非是在定義語句),所以報錯了。
"編譯器會預設認為我在操作ages[0]的那塊記憶體嗎?"
不會。先不談這乙個問題,首先這有乙個概念性錯誤。我先來解釋一下最後乙個問題中的一小部分:""這貨是做啥的。你可以認為這貨是乙個Dereference運算子,它的任務是:
1.到這塊記憶體位址,抓[東西]返回。
2.到這塊記憶體位址,把[東西]放上去。
除非你儲存的是乙個指標的陣列,通常情況下xx[x]的結果只是那個陣列中元素的值,不再是指標了。
"ages ="這是在操作ages的內容,ages本身有自己的位址,它的內容是那個陣列的位址。所以ages=與ages[0]毫無關係。只能說ages與&(ages[0])的值相等,是可以相提並論的東西。
呼叫函式時為什麼是functionName(陣列名);
而不是functionName(陣列名[空/個數]);
傳引數的時候如果函式要的是乙個陣列的話,那麼它接收的只是乙個4位元組長的位址(陣列第乙個元素的的指標)。
像我之前所說的,陣列名,也就是ages,它的值是陣列第乙個元素的位址,正式函式想要的。
"陣列名[空/個數/whatever]"這個會執行Dereference運算子,會把位址相對應的值抓出來,而不再是位址了。
"如在函式內計算陣列元素個數。。。有什麼解決辦法?"
如果不事先約定陣列固定的長度,在函式內獲取的話,通常有兩種解決辦法。
一,約定乙個終止符。最好的例子就是乙個由char陣列組成的字串,事先約定好"\0"是陣列的終止符,在函式內我們從陣列頭部遍歷陣列,碰到了終止符就知道陣列的長度了。
二,我們讓函式多接受乙個引數,這個引數裡寫上傳進去陣列的長度。
C 用const定義的一維陣列,用已經初始化的指標指向該陣列的首位址為什麼無效,但指向其他位址可以
陸海綿 const修飾陣列本質是修飾的陣列元素,所以陣列中每乙個元素都是const,對應的指標型別是const型別,你把乙個const指標賦值給乙個非const指標當然是非法。const double p locked 合法 leopard const關鍵字對於指標 包括陣列 來說是看是修飾誰的,也...
c語言字串陣列初始化時剩餘長度全部為 0 嗎?
C語言答疑課堂 我覺得題主的問題有三個地方需要回答 1.char abc abc 這種寫法是不指定陣列的大小,由編譯器來決定陣列的大小,而且會在初始化的字串的最後自動加上乙個 0 這種寫法的好處是,不用擔心初始化的字串會否超過陣列的長度。2.char abc 10 abc 這種寫法是指明了陣列的大小...
在C 中,定義變數時直接初始化與先定義,後賦值在時間複雜度上有區別嗎?
Ivony 1 對於編譯器而言,在同乙個作用域中變數宣告位置對編譯結果沒有影響,變數只要在使用前被宣告即可。2 這個問題和時間複雜度一毛錢關係都沒有。 alphonsez 如果是簡單型別,比如int等,那麼定義的時候沒有初始值,那麼只是在stack上分配空間,並沒有額外初始化動作。然後再賦值就會把值...