C语言中如何在函数中使用二维结构体指针数组并判断status值
修正C语言二维结构体指针数组的函数传参与条件判断问题
以下是针对代码中两个核心问题的解决方案:
1. 修正show_struct函数的参数类型
原函数参数struct mystruct* table无法匹配传入的二维结构体指针数组struct mystruct* table[X][Y],正确的参数类型有两种写法:
- 直接使用数组类型:
struct mystruct* table[X][Y](依赖宏定义的X、Y) - 使用指针形式(更通用,不依赖宏的跨文件可见性):
struct mystruct* (*table)[Y]
推荐使用指针形式,适配性更强。
2. 正确的CONDITION判断逻辑
status是结构体中长度为1的int数组,要判断其值是否为1,可通过两种等价方式访问元素:
- 数组下标方式:
table[X_selected][Y_selected]->status[0] == 1 - 指针解引用方式:
*(table[X_selected][Y_selected]->status) == 1
任选其一即可完成正确判断。
修正后的完整代码
#include <stdio.h> #include <stdlib.h> #include <string.h> // 补充strcpy所需头文件 #define X 5 #define Y 7 struct mystruct { char name[10]; int id[1]; int status[1]; }; // 修正参数类型为指针形式 void show_struct(struct mystruct* (*table)[Y], int X_selected, int Y_selected); int main(void) // 修正main返回值为int,符合C标准 { struct mystruct* table[X][Y]; int X_selected = 3; int Y_selected = 4; table[X_selected][Y_selected] = malloc(sizeof(struct mystruct)); // C语言无需强制转换malloc返回值 strcpy(table[X_selected][Y_selected]->name, "NAME"); *table[X_selected][Y_selected]->id = 0; *table[X_selected][Y_selected]->status = 1; show_struct(table, X_selected, Y_selected); free(table[X_selected][Y_selected]); // 补充内存释放,避免泄漏 return 0; } void show_struct(struct mystruct* (*table)[Y], int X_selected, int Y_selected) { if (table[X_selected][Y_selected]->status[0] == 1) { printf("OK , STATUS IS 1"); } else { printf("ERROR , STATUS IS NOT 1"); } }
额外优化说明:
- 补充
string.h头文件,解决strcpy的编译依赖 - 修正
main函数返回值为int,遵循C语言标准规范 - 移除
malloc返回值的强制转换,符合C语言代码风格 - 添加内存释放逻辑,避免内存泄漏
内容的提问来源于stack exchange,提问作者Musa Tombul
相关产品推荐
相关产品推荐

