[英]Passing an array to a function as a pointer
在學習C ++時,我遇到了這段代碼:
int &get(int *arry, int index) { return arry[index]; }
int main() {
int ia[10];
for (int i = 0; i != 10; ++i)
get(ia, i) = i;
我的問題是,它如何運作?
由於arry
是指針,這怎么可能?
內置的[]
語法實際上僅適用於指針。 在數組上使用它時,該數組首先衰減為指向其第一個元素的指針,然后將其索引。
在您的示例中,將數組作為參數傳遞給函數時,該數組將被衰減。 這里沒有數組引用。
令數組a [10]的基地址為1000。因此,如果要訪問數組a的索引2中的元素,則編寫a [2]。 根據編譯器,此語句的解釋為:
a [2] = 1000 +(2 * 2)= 1004
因此,您可以通過公式訪問任何元素:
a [index] = base_address +(sizeof數據類型*索引號)
現在,來到你的問題,當你給數組的唯一名稱,如ai
,你的情況,你實際上是通過數組的基址。 這就是在函數參數中使用指針符號的原因。 int *arry, int index
。
您必須了解以下內容:
int a,*b,c;
a=8;
b=&a;
c=*b;
當您打印c時,將得到8。
因此,如果index為2,則arry[index]
行將解釋為:
(base_address)+(sizeof int * 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.