如何将数组的地址传递给函数?

时间:2016-07-04 09:55:32

标签: c arrays pointers

我只是想询问如何将数组的地址传递给函数。

void me( int *a ) {
    printf("%d\n", *a); // that gives me 11
}

int main () {
    int x[3]  = { 11, 12, 13 };

    me(&x[0]);

return 0;
}

但是,如果我想通过重复我(& x [//我希望传递的位置)来传递整个数组怎么办;

有可能吗?

5 个答案:

答案 0 :(得分:4)

所有其他答案都很好,只有一件事要补充,构成我的观点。

你应该为你的函数添加一个参数,以便能够将它与不同长度的不同数组一起使用,所以将数组的长度传递给me函数

#include <stdio.h>

void me( int *a, size_t length ) {
    size_t i;
    for (i=0; i<length; i++)
       printf("Element %zu is %d\n", i, a[i]);
}

int main () {

    int x[3]  = { 11, 12, 13 };

    me(x, sizeof(x)/sizeof(x[0]));

    return 0;
}

如您所见,我使用sizeof返回数组的字节长度。因此将其除以数组中单个元素的字节大小。结果是数组的元素数量。

答案 1 :(得分:3)

但是 将“整个数组”传递给函数。通过将指针传递给第一个元素,您实际上也将指针传递给其余元素。

要打印出数组的第二个元素,请修改如下函数:

void me( int *a ) {
    printf("%d\n", a[1]); // prints the second element in a
}

这是有效的,因为对于任何数组或指针 a和索引i,表达式a[i]*(a + i)相同。

另请注意,简单地传递x与传递&x[0]相同,因为数组会自然地衰减到指向其第一个元素的指针。所以电话可能只是

me(x);  // Same as me(&x[0])

答案 2 :(得分:3)

数组的地址与第一个元素的地址相同。要打印其余元素,只需按下面增加指针。

#include <stdio.h>

void me( int *a ) {
    printf("%d\n", *a); // that gives me 11
    printf("%d\n", *(a+1)); // will give you 12
    printf("%d\n", *(a+2)); // will give you 13
}

int main () {

    int x[3]  = { 11, 12, 13 };

    me(&x[0]);

return 0;
}

答案 3 :(得分:1)

当你将数组名传递给一个函数时,它会自动传递数组的第一个元素的地址。所以我们也可以循环地址并访问其他元素。你可以试试这个。

#include<stdio.h>

void me( int *a) {
    int i;
    for(i=0;i<3;i++){
        printf("%d\n",*(a+i));
    }
}

int main () {

    int x[3]  = { 11, 12, 13 };

    me(x);

return 0;
}

输出

11
12
13

答案 4 :(得分:0)

是的,您可以将整个数组传递给函数。所以,

 me(x); //Pass only name of array

数组保持元素的起始地址意味着x[0]地址。

#include<stdio.h>

void me( int *a) {
    int i=0;
    while (i<3)
    {
        printf("%d\n",*(a+i));
        i++;
    }
}

int main () {

    int x[3]  = { 11, 12, 13 };

    me(x);

return 0;
}