我有一个结构:
struct Thing {
int id;
}
然后我创建了一个Thing
s:
struct Thing *a;
a = (struct Thing *) malloc(sizeof(struct Thing));
a->id = 1;
struct Thing *b;
b = (struct Thing *) malloc(sizeof(struct Thing));
b->id = 2;
struct Thing *array[] = {a,b};
我检查数组的大小是2。 我通过以下方式检查数组的大小:
printf("%d",sizeof(array)/sizeof(array[0]));
我还有一个函数,它接收了一系列的东西:
void function(struct Thing *array[]) {
//do stuff
}
然后我将数组传入函数:
function(array);
在函数内部,数组的大小为1。 有人能指出我哪里出错了,为什么数组1的大小在函数内?
答案 0 :(得分:2)
当你将一个任何类型的数组传递给一个函数时,它衰减到指向这个数组的第一个元素的指针。
void function(struct Thing *array[]) {
//do stuff
}
只是
的语法糖void function(struct Thing** array) {
//do stuff
}
答案 1 :(得分:1)
您的数组定义
struct Thing *array[] = {a,b};
应该是
struct Thing array[] = {a,b};
然后将其传递给函数;该函数应声明
void function(struct Thing *array, int count) {
//do stuff
}
所以你可以传递数组的边界。