我知道陣列的名稱是一個常量指標。我想知道回傳的指標是什么情況malloc()?它是一個常量指標嗎?
uj5u.com熱心網友回復:
我知道陣列的名稱是一個常量指標。
你誤會了。陣列不是指標。但在極少數例外的運算式中使用它們會隱式轉換為指向它們的第一個右值元素的指標。陣列本身是不可修改的左值。
來自 C 標準(6.3.2.1 左值、陣列和函式指示符)
3 除非它是 sizeof 運算子或一元 & 運算子的運算元,或者是用于初始化陣列的字串字面量,否則型別為 ''array of type'' 的運算式將轉換為型別為 ''pointer 的運算式鍵入指向陣列物件的初始元素且不是左值的''。如果陣列物件具有暫存器存盤類,則行為未定義。
函式 malloc 回傳分配的記憶體地址的值。它不是一個常量指標。但由于它是一個右值,您可能不會為回傳的指標分配新值。
正如@John Bollinger評論中正確提到的那樣,函式的回傳malloc型別void *不是void * const。
uj5u.com熱心網友回復:
malloc(MEM_SIZE) 回傳的不是常量,通常是“可讀可寫”的記憶體空間地址。
可讀寫空間的大小為MEM_SIZE。如果超過 MEM_SIZE,程式會拋出記憶體越界錯誤。運氣好程式會崩潰,運氣不好你會感覺很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524305.html
下一篇:是否可以在C中復雜化指標?
