确定C中的数组大小

时间:2012-05-18 09:13:04

标签: c arrays

  

可能重复:
  Sizeof an array in the C programming language?

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

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

是什么给出的?为什么会如此?如何将其置于自己的功能中?

3 个答案:

答案 0 :(得分:2)

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

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

实际上是:

int arrayLengths(struct student* g) {
    return sizeof(struct student*)/sizeof(struct student);
}

答案 1 :(得分:1)

arrayLengths内的代码如何知道数组有多大?

答案 2 :(得分:0)

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

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

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

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