C99语法之初始化结构体

  C99中中结构体初始化也提供了一个比较奇葩的初始化方式:

#include<stdio.h>
#include<stdlib.h>

struct MyStruct
{
    int num;
    float fl;
    double db;
    _Bool b;//c99新增的bool类型 1,0

}my1 = { .num = 10, .fl = 10.9, .db = 19.8, .b = 0 };//初始化的形式

void main()
{

    printf("%d,%f,%f,%d", my1.num, my1.fl, my1.db, my1.b);

    struct MyStruct  my2 = (struct MyStruct){ .num = 10 };//默认会清零
    printf("\n%d,%f,%f,%d", my2.num, my2.fl, my2.db, my2.b);

    getchar();

    //不能用变量直接初始化,需要用结构体初始化的方式直接初始化一个结构体变量
    struct MyStruct *p = (struct MyStruct[])
    {
        [0] = { .num = 10, .fl = 10.9, .db = 19.8, .b = 0 },
            [1] = { .num = 10 }
    };

    getchar();
}

这个方式初始化结构体和 初始化数组那种方式是一样的。因此只是表现形式不一样其实质和原来的初始化是一样的。

            

                                                by:ECN14

时间: 2024-08-06 15:59:55

C99语法之初始化结构体的相关文章

初始化结构体数组/切片

package main import "fmt" func main() { var s []student fmt.Printf("%T\n", s) //[]main.student fmt.Println(s) //[] //初始化结构体切片 s = []student{ { name: "yang", age: 18, }, } fmt.Println(s) //[{yang 18}] var s2 [5]student fmt.Pri

【Go】语法基础之结构体

结构体的定义很简单: type Vertex struct { X, Y float64 } 可以理解为多个变量的集合. 结构体的使用: 1.直接使用: v := Vertex{1, 2} 或 var v = Vertex{1, 2} 2.通过new关键字: v := new(Vertex) 3.通过指针访问: v := &Vertex{1, 2} 为结构体添加方法: package main import ( "fmt" "math" ) type Ver

怎样用函数初始化结构体

问题 这里主要讨论函数的参数,应该是结构体呢,还是结构体的地址,还是二者都行. 实验证明,只能用结构体的地址. 代码 #include<stdio.h> #include<math.h> #include<stdlib.h> typedef struct { int a; //"int a=0;" is wrong int b[10]; }STU; void init_struct_point(STU *s){ //参数为数组指针 s->a=1

初始化结构体

typedef struct { /* RTK control/result type */ sol_t sol; /* RTK solution */ double rb[6]; /* base position/velocity (ecef) (m|m/s) */ int nx, na; /* number of float states/fixed states */ double tt; /* time difference between current and previous (s

C数组&amp;结构体&amp;联合体快速初始化

背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元素或结构体某些成员进行选择性初始化,只需指明它们所对应的数组下标或结构体成员名.GNU C将其作为C89模式的扩展. 借助指定初始化特性,可实现数组或结构体元素的快速初始化. 1 数组初始化 在数组初始化列表中使用"[index常量表达式]=value"形式可对index所指定的某个元素进

Linux下C结构体初始化[总结]

1.前言 今天在公司看一同事写的代码,代码中用到了struct,初始化一个struct用的是乱序格式,如下代码所示: typedef struct _data_t { int a; int b; }data_t; data_t data = { .a = 10, .b = 20, }; 通常初始化一个结构体的方式是按序初始化,形如:data_t data={10,20}.感觉很好奇,如是上网百度一下,发现linux下struct初始化可以采用顺序和乱序两种方式,而乱序又有两种不同的形式. 本文总

C语言结构体声明中冒号的使用(占位符) &amp; C结构体的乱序初始化

有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为"位域"或"位段".所谓"位域"是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数.每个域有一个域名,允许在程序中按域名进行操作.这样就可以把几个不同的对象用一个字节的二进制位域来表示.一.位 域的定义和位域变量的说明位域定义与

C语言结构体初始化的三种方法

直接上示例了 #include <stdio.h> struct student_st { char c; int score; const char *name; }; static void show_student(struct student_st *stu) { printf("c = %c, score = %d, name = %s\n", stu->c, stu->score, stu->name); } int main(void) {

结构体数组初始化三种方法,转载

C语言结构体初始化的三种方法:原文链接http://www.2cto.com/kf/201503/386575.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include <stdio.h> struct student_st {     char c;     int score;     const c