将一个struct数组传递给函数会改变数组的大小

时间:2013-02-25 07:39:25

标签: c arrays function struct

我有一个结构:

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的大小在函数内?

2 个答案:

答案 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
}

所以你可以传递数组的边界。