C语言结构体传参报错:期望letters_t类型却传入letters_t*类型
结构体函数参数类型不匹配问题解答
报错原因解析
你看到的报错里pixels_t是编译器的笔误,实际是letters_t类型不匹配:
- 函数
fillLetterArray的声明和定义参数是单个letters_t结构体变量 - 但你在
main中传入的是数组名letterArray,数组名作为函数参数时会自动退化为指向数组首元素的指针(类型为letters_t*),和函数要求的letters_t类型不兼容,因此触发报错。
修复方案
因为你的需求是填充整个结构体数组,所以需要修改函数参数为指针类型,同时建议传入数组长度避免越界:
typedef struct{ unsigned int a, b, c; }letters_t; // 修改参数为结构体指针,增加数组长度参数 void fillLetterArray(letters_t *letters, int length); int main (void){ letters_t letterArray[100]; // 传入数组名(自动转为指针)和数组长度 fillLetterArray(letterArray, 100); } void fillLetterArray(letters_t *letters, int length){ // 示例:遍历数组初始化每个结构体元素 for(int i = 0; i < length; i++){ letters[i].a = 0; letters[i].b = 0; letters[i].c = 0; } }
补充说明
- 数组名作为函数参数时,本质是指向数组第一个元素的指针,无法直接传递整个数组的值(结构体数组也不例外)
- 增加长度参数是必要的,因为函数内部无法通过指针获取原数组的长度,避免出现数组越界访问的问题
内容的提问来源于stack exchange,提问作者flypotato
相关产品推荐
相关产品推荐

