将数组传递给函数并访问所有元素

时间:2014-08-04 22:41:06

标签: c

在下面的程序中,我已将数组a传递给Sum。我想问一下,传递a只是意味着我们传递函数中第一个成员的地址。那么函数如何访问数组的2和其他元素?我使用过的循环是否会调用其他成员?如果没有在Sum函数中放置一个循环,那么我会留下Sum作为数组a的第一个成员吗?因为在这种情况下我没有循环遍历数组的所有值?

其他的是运算符的大小我已经通过了一个来计算数组的大小。但是当我有一个结构时说:struct node {...};为什么我需要传递带有struct的完整名称,即sizeof(struct node)为什么我不能像我们在数组中那样做这个sizeof(节点)?

#include <stdlib.h>
#include <stdio.h>

int Sum(int a[], int size)
{
int i,sum=0;
for(i=0; i<size; i++)
{
sum+= a[i];
}
return sum;
}


int main()
{
int a[]= {1,2,3,4,5},b;
size = sizeof(a)/sizeof(a[0]);
b=Sum(a);
print("%d",b); 
return 0;
}

2 个答案:

答案 0 :(得分:2)

表达

a[i]

相当于

*( a + i )

其中a是指针。因此,如果指向数组的第一个元素,那么a + 0也将指向数组的第一个元素。 a + 1将指向数组的第二个元素,依此类推。

因此表达式( a + i )指向数组的第i个元素,其中i从0更改为size - 1.

因此,将函数传递给数组的某个元素并指定包含指向元素的元素数量就足够了。

对于结构和枚举,然后在C中你必须指定它们,因为它们的名称属于不同的名称空间,而不是其他标识符,包括typedef名称。如果您不想起诉结构和枚举的标记名称,请使用typedef声明。例如

typedef struct node node;

答案 1 :(得分:1)

在main中,“a”是一个数组,因此所有元素在内存中彼此相邻(即[1]跟在内存中的[0]等)。

在函数Sum中,“a”成为指针,但在C中,您可以对数组和指针使用相同的语法(使用operator []时,数组将转换为指针。)

所以当你写一个[i]时,你没有调用任何东西,你只是从地址a访问偏移量i的内存。

修改

关于结构,请参阅Vlad回答。