首页 > 编程知识 正文

结构体成员指针,c语言结构体成员初始化

时间:2023-05-04 16:44:36 阅读:178883 作者:538

问题:如果一个结构的成员是指针类型,则向该结构请求内存不会为指针成员分配内存。

步骤如下。

# include stdio.h # include stdlib.htypedefstructexample { int * a; char *b; }example_t; intmain(intargc,char** argv ) {example_t *exam; exam=(example_t* ) malloc ) sizeof ) example_t ); if(null==Exam ) printf('%sn ',' exam malloc failed ' ); 返回- 1; }printf('%pn”,exam ); printf(%p(n ),exam-a ); printf(%p(n ),exam-b ); 自由(exam ); 返回0; }结果如下。

$ gcc exam.c $./a.out0x 1051150 (nil ) )表示没有将内存作为指针成员分配给结构。

解决方案:向结构申请空间时,同时向指针成员申请空间

# include stdio.h # include stdlib.htypedefstructexample { int * a; char *b; }example_t; intmain(intargc,char** argv ) {example_t *exam; exam=(example_t* ) malloc ) sizeof ) example_t ); if(null==Exam ) printf('%sn ',' exam malloc failed ' ); 返回- 1; }printf('%pn”,exam ); printf(%p(n ),exam-a ); printf(%p(n ),exam-b ); 打印((n ); Exam-a=(int* ) malloc (sizeof ) int ); Exam-b=(char* ) malloc (sizeof ) char ); printf(%p(n ),exam ); printf(%p(n ),exam-a ); printf(%p(n ),exam-b ); 自由(exam ); free(Exam-a ); free(Exam-b ); 返回0; }结果如下。

$gccexam.c$./a.out0xd8d150(nil ) ) nil )0xd8d1500xd8d5680xd8d578此时,结构的指针成员具有分配的内存。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。