1

我有一个结构:

struct Thing {
    int id;
}

然后我创建一个 s 数组Thing

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?

4

2 回答 2

2

当您将任何类型的数组传递给函数时,它会衰减为指向该数组第一个元素的指针。

void function(struct Thing *array[]) {
    //do stuff
}

只是语法糖

void function(struct Thing** array) {
    //do stuff
}
于 2013-02-25T07:40:35.170 回答
1

你的数组定义

struct Thing *array[] = {a,b};

应该

struct Thing array[] = {a,b};

然后将其传递给函数;该函数应该被声明

void function(struct Thing *array, int count) {
//do stuff
}

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

于 2013-02-25T07:44:15.540 回答