c - 将结构数组传递给函数会更改数组的大小

标签 c arrays function struct

<分区>

我有一个结构:

struct Thing {
    int id;
}

然后我创建一个 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 的大小?

最佳答案

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

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

只是

的语法糖
void function(struct Thing** array) {
    //do stuff
}

关于c - 将结构数组传递给函数会更改数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15062157/

相关文章:

java - 如何防止 Eclipse 自动删除我的 exe 文件

c - 替代 malloc

c++ - 在 C++ 中初始化类变量 float 数组

python - 如何在函数内获取函数对象(Python)

c - 为什么我们需要在 pthread_cond_wait 之前进行条件检查

c - 没有名为 main.c 的源文件。 gdb断点设置

javascript - 使用 JavaScript 将带有数组的 JSON 文件上传到不同的选项卡

c - 关于 C 中的字符指针

javascript - 将变量传递给 JavaScript 函数

javascript - 如何在参数之类的函数中使用函数调用者变量?