如何将已分配内存的struct ant指针赋值给struct cat二级指针的对应成员
实现方案
要完成赋值操作,需要先为二级指针sample及对应的struct cat实例分配内存后,再直接赋值指针即可,具体流程如下:
操作步骤
- 第一步:为二级指针
sample分配内存,它的作用是存储若干个struct cat *类型的指针 - 第二步:为
sample中存储的每个struct cat实例分配内存空间 - 第三步:将已分配好的
info直接赋值给struct cat实例的c成员
完整代码示例
#include <stdio.h> #include <stdlib.h> struct ant{ int stu; int clas; char *name; }; struct cat{ int a; int b; struct ant *c; }; int main() { struct cat **sample; struct ant *info; // 原有逻辑:为info分配内存 info = calloc(1, sizeof(*info)); // 示例:给info成员赋值用于后续验证 info->stu = 1001; info->clas = 3; info->name = "测试学生"; // 步骤1:给sample分配内存,示例存储1个struct cat*指针,需要更多实例可修改第一个参数 sample = calloc(1, sizeof(struct cat *)); // 步骤2:给第0个struct cat实例分配内存 sample[0] = calloc(1, sizeof(struct cat)); // 步骤3:直接赋值info到c成员 sample[0]->c = info; // 验证赋值结果 printf("学号:%d\n", sample[0]->c->stu); printf("班级:%d\n", sample[0]->c->clas); printf("姓名:%s\n", sample[0]->c->name); // 内存释放,需严格按照从内到外的顺序避免泄漏 free(info); free(sample[0]); free(sample); return 0; }
注意事项
如果后续你为struct ant的name成员动态分配了内存存储字符串,释放内存时需要先释放name指向的内存,再释放info。
内容的提问来源于stack exchange,提问作者Katta Sivasai
相关产品推荐
相关产品推荐

