美文网首页
c语言结构体初始化的几种方式

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

作者: struct | 来源:发表于2018-04-04 17:57 被阅读0次

编译环境:
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;
}

相关文章

  • 13 C结构体

    1、why结构体? 2、结构体的初始化 3、结构体的几种定义方式

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

    编译环境:gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16...

  • C语言 13 结构体数组

    C语言 13 结构体数组 结构体数组的定义 结构体数组初始化 结构体成员的使用 格式 : 字符串成员的处理 结构体...

  • OC让C语言面向对象的方式

    objc让C语言面向对象的方式 简介:objc使用结构体让C语言支持面向对象。本文主要对这些结构体的功能和实际运行...

  • C语言 结构体,联合体,枚举

    结构体 C语言中结构体是一组构造数据类型,把不同的数据类型整合起来成为一个自定义的数据类型。如: 初始化方式 或者...

  • C语言和OC的结构体(struct)

    Struct(结构体) 1.结构体定义 2.结构体变量 3.结构体数组 4.C语言结构体指针 5.C语言共用体 6...

  • GO语言学习

    go语言的结构体 声明:type 结构体名 struct{x,y int}初始化:未显示初始化结构体变量的,初始值...

  • C语言结构体初始化

    结构体初始化有三种方法,代码例子如下: 运行结果如下:

  • c++

    1.C++结构体的初始化

  • GeekBand:C++直接初始化和拷贝初始化

    C++语言有几种不同的初始化方式: 直接初始化 不使用=号 拷贝初始化 使用=号初始化一个变量 拷贝初始化不仅在我...

网友评论

      本文标题:c语言结构体初始化的几种方式

      本文链接:https://www.haomeiwen.com/subject/wfflhftx.html