簡體   English   中英

為什么數組保存C中第一個元素的地址?

[英]Why array holds the address of the first element in C?

有人說c中的數組不是指向數組第一個元素的指針, 為什么數組名是指向數組第一個元素的指針? 因此,當您使用“printf”在c中打印數組時,為什么它顯示第一個元素的地址而不是數組元素?

更新:

const char  h[10]="Hello";
printf("%p", h);

輸出:00AFFE0C

正如一個答案所說,這是因為我指定的%類型,這是有道理的,因為我寫的時候

printf("%s", h);
OR
printf(h);

輸出:你好

這里有兩個問題:

1)在printf(h)中; 為什么它不會衰減數組並打印指針值,因為在衰減數組中將轉換為指針

2)如何以相同的方式打印int數組,即int數組的printf中的%類型

數組和指針之間的區別在於編譯器知道數組的大小和大小,因此它可以執行一些靜態檢查,解決僅使用指針無法實現的計算。

另外,在printf()的情況下,傳遞它並不重要,因為它是一個可變參數函數。 除了格式字符串之外,它對你傳遞的參數類型一無所知,所以如果傳遞%s參數,你實際上將它轉換為char* 如果傳遞錯誤類型的參數,編譯器可能會給出警告的唯一原因是因為它是一個內部函數,編譯器知道它。

大多數采用數組的函數都將它們作為指針參數,因此除非函數指定數組類型作為參數,否則在調用函數時也會隱式地將數組轉換為指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM