0

可能重复:
C 编程语言中数组的大小?

在我的主要功能中,我有以下代码:

struct student s1 = {"zack",0,0,82};
struct student s2 = {"bob",0,0,80};
struct student s3 = {"joe",0,0,97};
struct student s4 = {"bill",0,0,100};

struct student c[] = {s1,s2,s3,s4};

printf("%d\n\n", arrayLengths(c));
printf("%d\n\n", sizeof(c)/sizeof(c[0]));

其中arrayLength定义为:

int arrayLengths(struct student g[]) {
    return sizeof(g)/sizeof(g[0]);
}

尽管我得到了两个不同的结果,但使用重复的代码。我的控制台输出是:

0
4

是什么赋予了?为什么会这样,我怎样才能把它放在它自己的功能中?

4

3 回答 3

2

当一个数组被传递给一个函数时,它会衰减为一个指针,指向数组中的第一个元素。所以:

int arrayLengths(struct student g[]) {
    return sizeof(g)/sizeof(g[0]);
}

实际上是:

int arrayLengths(struct student* g) {
    return sizeof(struct student*)/sizeof(struct student);
}
于 2012-05-18T09:16:12.663 回答
1

里面的代码arrayLengths怎么知道数组有多大?

于 2012-05-18T09:15:59.430 回答
0

传递给函数的数组衰减为指针。在 32 位系统上,指针大小通常为 4 个字节。

而主函数中数组的大小将等于

sizeof(array element type) * (number of elements in the array)

这应该可以解释您所看到的行为。

于 2012-05-18T09:18:56.390 回答