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

如何将已分配内存的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:45:02