You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:41:01