C語言函式名,陣列名稱的困惑?

時間 2021-05-31 16:24:37

1樓:暮無井見鈴

函式名、陣列名作為表示式,常常(甚至單獨出現時也會)要經歷函式到指標/陣列到指標隱式轉換,變成指向函式/指向陣列首元素的指標值(非左值)。轉換後的指標值才是位址。

然而,函式名、陣列名作為表示式時,本身是函式或陣列型別的表示式,它們是「函式指代器 (function designator) 」值和左值,是允許取位址的。

而且陣列物件擁有連續的一塊記憶體,本身佔空間,只是隱式轉換出的指標值不佔空間而已。

另外對函式名和陣列名取位址有區別。

C 中函式無論如何都要轉換成函式指標型別才能用, &f 是把必要的處理寫成顯式,本身不提供更多功能。

而陣列名取位址與陣列隱式轉換成指標的結果型別不同。

宣告 T a[N]; 後, &a 的型別為 T (*)[N] ,即指向 N 個 T 的陣列的指標,而 +a (等價於 a+0 或 &a[0])的型別為 T* 。

(另外 C++ 中這些內容有少量區別)

2樓:郭建波

陣列是一組連續的型別相同的資料的組合,

在記憶體中陣列就是一塊連續的記憶體

而陣列名就是這塊連續記憶體的首位址,

陣列名稱是讓我們人類看的,它對應的位址才是計算機能識別的。

即陣列名稱和記憶體位址是一一對應的,

C語言30天核心突破

3樓:

陣列名,函式名等name

在c語言中是無意義的,是給人看的

也就是說,這些玩意在編譯和鏈結過程中是作為介面的這麼說恐怕不太好理解

就是說編譯和鏈結過程中名字會被轉換成相對記憶體位址並不是名字儲存位址

你可以去看看書《程式設計師的自我修養——鏈結裝載與庫》

可能對你來說比較困難

加油,差不多啃懂了你好多底層的東西就懂了

4樓:左江

因為陣列名並不是乙個位址並不是乙個數值

陣列名表示的是一塊連續的記憶體塊

&陣列名表示獲取乙個指向這個記憶體塊的指標

而不是 &乙個數值

C語言裡如何按需生成函式指標陣列?

暮無井見鈴 C 怎麼生成 4096 個函式?參考這裡的巨集,編譯時生成這些函式是可行的。C 的話用 index sequence 模板就行。 VeroFess 手機回答 我是這麼做的 shellcode 彙編引擎 mmap VirtulAlloc 是不太安全 我乙個寫殼的管他安不安全 gcc下 in...

C 語言中指標陣列和陣列指標 函式指標 指向函式的指標等等該怎麼理解?

ga6840 direct declarator IDENTIFIER declarator direct declarator direct declarator assignment expr direct declarator declarator direct declarator poin...

c 中函式宣告時使用void函式名(函式型別)是什麼意思 為什麼要這樣宣告函式?

你看那銳雯 首先去驗證。你測試一下乙個不需要返回值的函式不寫void,會發生什麼?報什麼錯就會發現如果不寫編譯器會認為那你需要返回 int 第二,仔細研究c語言的函式返回值語法,以及同樣類似的問題,編譯器找不到函式宣告會發生什麼?這個時候編譯器是如何判定返回值型別的?這些都在c標準規定了,當然有些是...