在我的主要功能中,我有以下代码:
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
是什么给出的?为什么会如此?如何将其置于自己的功能中?
答案 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)
这应该可以解释你所看到的行为。