簡體   English   中英

將數組作為指針傳遞給函數

[英]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是指針,這怎么可能?

內置的[]語法實際上僅適用於指針。 在數組上使用它時,該數組首先衰減為指向其第一個元素的指針,然后將其索引。

在您的示例中,將數組作為參數傳遞給函數時,該數組將被衰減。 這里沒有數組引用。

在C ++中,您可以將數組( 在這種情況下)視為指向該數組中第一個項目的指針,其中數組中的所有項目在內存中一個接一個地排列:

 _____
|  6  |   <-- ai
|  9  |
|  4  |
|__2__|

因此, *ai應該產生6

*(ai+1)應該為9 ,依此類推...(事實證明, ai[x]是-的語法糖 ,它直接轉換為- *(ai+x)

傳遞數組時,僅傳遞指向第一項的指針。 然后,該函數通過reference返回arry[index]的值。 這意味着,如果我們更改返回值,則實際上是在更改arry[index] ,我們知道它是ia[i]

這有意義嗎?

令數組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.

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