将数组作为指针传递给函数

时间:2015-07-01 15:29:14

标签: c++ arrays

在我学习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是一个指针,这怎么可能?

3 个答案:

答案 0 :(得分:3)

事实上,内置的[]语法只能在指针上使用 。在数组上使用它时,数组首先decayed成为指向其第一个元素的指针,然后将其编入索引。

在您的示例中,将数组作为参数传递给函数时,数组会被衰减。这里没有数组引用。

答案 1 :(得分:1)

让数组a [10]的基址为1000.因此,如果要访问数组a的索引2中的元素,则编写[2]。根据编译器对此语句的解释是:

  

a [2] = 1000 +(2 * 2)= 1004

因此,您可以通过以下公式访问任何元素:

  

a [index] = base_address +(sizeof datatype * index no)

现在,回到你的问题,当你只给出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)

答案 2 :(得分:0)

在C ++中,您可以将数组 - in this situation - 视为指向该数组中第一个项目的指针,其中数组中的所有项目在内存中依次排列:

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

那么,*ai应该产生6

*(ai+1)应为9,依此类推......(事实证明,ai[x]syntactic sugar - 它直接转换为 - {{ 1}})

传入数组时,只传递指向第一个项目的指针。然后,该函数通过引用返回*(ai+x) 的值。这意味着如果我们更改返回值,我们实际上正在更改arry[index],我们知道这是arry[index]

这有意义吗?