c语言结构体初始化的几种方式

编译环境:
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)

测试结构体声明如下:

struct person
{
  int age;
  char name[256];
}

第一种: 先定义变量, 用[.]或者[->]引用的方式初始化

//栈空间
struct person p1;
p1.age = 20;
strcpy(p1.name, "xiaoming");
printf("age: %d\n", p1.age);
printf("name: %s\n", p1.name);

//堆空间
struct person * p2 = NULL;
p2 = (struct person *)malloc(sizeof(*p2))
if(p2 != NULL)
{
  p2->age = 22;
  strcpy(p2->name, "xiaohong");
  printf("age: %d\n", p2->age);
  printf("name: %s\n", p2->name);
  free(p2);
  p2 = NULL;
}

第二种: 显示按顺序在大括号中赋值初始化

/**栈空间**/
//定义的时候同时初始化, 必须注意顺序
struct person p1 = {18, "xiaoming"};
printf("age: %d\n", p1.age);
printf("name: %s\n", p1.name);
//可先定义后初始化
struct person p2;
p2 = (struct person){19, "xiaohong"};
printf("age: %d\n", p2.age);
printf("name: %s\n", p2.name);

/**堆空间**/
//先申请好内存,后进行初始化
struct person * p3 = NULL;
p3 = (struct person *)malloc(sizeof(*p3));
if(p3 != NULL)
{
  *p3 = (struct person){20, "xiaohua"}; 
  printf("age: %d\n", p3->age);
  printf("name: %s\n", p3->name);
  free(p3);
  p3 = NULL;
}

第三种: 在大括号中[.] + [成员]初始化方式, 这种方式linux内核常用与初始化顺序无关;如果有重复的,最后一次初始化的值生效。(ps: 大括号中的最后一个逗号可加可不加)

/**栈空间**/
//定义的同时初始化
struct person p1 = 
{
  .age = 20,
  .name = "xiaoming",
  .age = 21,
};
printf("age: %d\n", p1.age);
printf("name: %s\n", p1.name);
//先定义再初始化
struct person p2;
p2 = (struct person)
{
  .age = 21,
  .name = "xiaohong",
};
printf("age: %d\n", p2.age);
printf("name: %s\n", p2.name);

/**堆空间**/
//先申请内存后初始化
struct person * p3 = NULL;
p3 = (struct person *)malloc(sizeof(*p3));
if(p3 != NULL)
{
  *p3 = (struct person)
  {
    .age = 22,
    .name = "xiaohua",
  };
  printf("age: %d\n", p3->age);
  printf("name: %s\n", p3->name);
  free(p3);
  p3 = NULL;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,986评论 19 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,587评论 9 467
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,970评论 6 342
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,239评论 2 33
  • 我不知道你们有没有这样的感觉 当你一个很亲的人有了和你不一样的圈子后,每次他发空间说说你都会看和你非共同好友的留言...
    竹林尽染中阅读 240评论 0 1