c语言 struct 的初始化

转自:http://www.cnblogs.com/silentjesse/archive/2013/07/30/3225212.html

struct数据有3中初始化方法:顺序,C风格及C++风格的乱序。

1)顺序 
这种方法很常见,在一般的介绍C的书中都有介绍。顺序初始化的特点是: 按照成员定义的顺序,从前到后逐个初始化;允许只初始化部分成员;在被初始化的成员之前,不能有未初始化的成员。 
eg:

struct User oneUser = {10, "Lucy", "/home/Lucy"}; 

2)乱序(C风格)

顺序的缺陷是必须按成员定义的顺序逐个初始化,不能间隔。而乱序的方式则很好的解决了这个问题,因为这种方式是按照成员名进行。
eg:

struct User oneUser = {
                        .name = "Lucy",
                        .id = 10,
                        .home = "/home/Lucy"
                      }; 

3)乱序(C++风格) 
C++风格的乱序初始化方式跟C风格的一样,只是它更常用在C++代码里。 
eg:

struct User oneUser = {
                                 name:"Lucy",
                                 id:10,
                                 home:"/home/Lucy"
                       }; 

注:

不论是哪种方式,都允许只初始化部分成员;未被初始化的成员默认为0(指针类型的成员默认为NULL)。两种乱序初始化方法,即可以用在C代码中,也可以用在C++代码中。

时间: 2024-08-29 07:42:16

c语言 struct 的初始化的相关文章

c语言中struct的初始化

C++中的struct已经和class一样,可以用构造函数初始化. C语言中的struct怎么初始化呢? typedef struct _TEST_T {        int i;        char c[10];}TEST_T; TEST_T gst  = {1, “12345”};//可以初始化,设置i为1,s为一个字符串. TEST_T gst  = {1};//初始化个数少于实际个数时,只初始化前面的成员. TEST_Tgst  = {.c=“12345”};//有选择的初始化成员

struct的初始化

1.struct的初始化可以使用类似数组的方式,如下:struct Student{ int _Age; string _Name;};Student stu = {26,"Andy"};2.有两个地方需要注意: a.顺序要保持一致,如下: Student stu = {"Andy",26}; 编译报错 b.后面的可以不初始化 Student stu = {26}; 只初始化_Age3.考虑下面的情况,Student当中有个字段,表示Student对象的大小,而在D

struct {0}初始化

#include <iostream> struct MyStruct { MyStruct(int a) { a = b = 0; } int a; int b; }; int main() { MyStruct my = {0};//列表初始化只适合非聚合结构体,所以这样不行,所以需要将上面的构造函数去掉,但发现把struct换成class还是不行的,莫非class天生就是聚合的? getchar(); return 0; }网上搜到的解释 4.1.3 聚合(aggregate) int

转:C语言的数组初始化

C语言的数组初始化 c++ 数组操作

c语言 struct结构体的变量声明加冒号

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

GO语言struct语法

struct -使用type<Name>struct{}定义结构,名称遵循可见性规则 -支持指向自身的指针类型成员 -支持匿名结构.可作用成员或定义成员变量 -匿名结构也可以用于MAP的值 -可以使用字面值对结构进行初始化 -允许值通过指针来读写结构成员 -相同类型的成员可进行直接拷贝赋值 -支持==与!=比较运算符,不支持>或< -支持匿名字段,本质上是定义了以某个类型名称的字段 -嵌入结构作为匿名字段看起来像继承.但不是继承 -可以使用匿名字段的指针 package main

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

定义 struct InitMember{    int first:    double second:    char* third:    float four;}; 方法一:定义时赋值 struct InitMember test = {-10,3.141590,"method one",0.25}: 需要注意对应的顺序,不能错位.方法二:定义后逐个赋值 struct InitMember test: test.first = -10;test.second = 3.14159

c语言struct和c++的class的暧昧

c语言风格的封装 数据放在一起,以引用和指针的方式传给行为c++ 认为封装不彻底 1数据和行为分开 对外提供接口 2没有权限设置 看看struct的一个例子 1 //data.h 2 3 //c语言风格的封装 数据放在一起,以引用和指针的方式传给行为 4 //c++ 认为封装不彻底 5 //1数据和行为分开 对外提供接口 6 //2没有权限设置 7 8 struct Date 9 { 10 int year; 11 int month; 12 int day; 13 }; 14 15 16 vo

C语言指针的初始化和赋值

1.指针的初始化 指针初始化时,"="的右操作数必须为内存中数据的地址,不能够是变量,也不能够直接用整型地址值(可是int*p=0;除外,该语句表示指针为空).此时,*p仅仅是表示定义的是个指针变量,并没有间接取值的意思. 比如: int a = 25; int *ptr = &a; int b[10]; int *point = b; int *p = &b[0]; 假设:int  *p; *p = 7; 则编译器(vs2008)会提示The variable 'p'