C语言类型不兼容报错:int与struct相互赋值问题及代码求助
解决C语言中int与struct类型赋值不兼容的问题
嘿,我一眼就瞅出问题所在了——你遇到的赋值时类型不兼容错误,核心原因是选择排序函数里用来临时存数据的temp变量类型完全不对!
先看你代码里的问题片段:
void selection_sort(struct protein protein_powders[], int n) { int i, largest = 0, temp; // 这里temp被定义成了int类型 if (n == 1) return; for (i = 1; i < n; i++) if (protein_powders[i].averageReview < protein_powders[largest].averageReview) largest = i; if (largest < n - 1) { temp = protein_powders[largest]; // 这里试图把struct protein类型的值塞给int,编译器当然要报错! // 后面你肯定还打算把temp赋值回结构体数组,这同样会触发类型不匹配的错误 } }
问题拆解
你要交换的是struct protein类型的数组元素,但你把临时变量temp定义成了int——这俩类型八竿子打不着,编译器肯定不允许这种跨类型赋值呀。
修正方案
把temp的类型改成struct protein就行,这样它就能正确存储结构体数据,完成交换操作了。我帮你把整个排序函数修正好了:
void selection_sort(struct protein protein_powders[], int n) { int i, largest = 0; struct protein temp; // 改成结构体类型的临时变量 if (n == 1) return; for (i = 1; i < n; i++) { if (protein_powders[i].averageReview < protein_powders[largest].averageReview) { largest = i; } } if (largest != n - 1) { // 这里把<改成!=逻辑更准确,避免多余的交换 // 直接交换两个结构体元素,C语言原生支持结构体赋值 temp = protein_powders[largest]; protein_powders[largest] = protein_powders[n - 1]; protein_powders[n - 1] = temp; } // 递归处理剩下的元素 selection_sort(protein_powders, n - 1); }
小提示
C语言里结构体是可以直接赋值的,不用手动逐个成员复制,这样写不仅简洁,还不容易出错~
内容的提问来源于stack exchange,提问作者22pac
相关产品推荐
相关产品推荐

