结构体的4种初始化方式

本文介绍了C语言中结构体的定义与初始化方法,并通过实例演示了四种不同的初始化方式及如何从结构体中取出数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[转载] http://blog.csdn.net/github_26672553/article/details/50382188

//  main.c
#include <stdio.h>

int main(int argc, const char * argv[]) {

    //定义结构体类型
    struct Person
    {
        char *name;
        int age;
        double heigth;
    };

    //初始化的4种方式

    //1.定义的同时初始化
    struct Person p1 = {"zhangsan",20,170};

    //2.先定义再逐个初始化
    struct Person p2;
    p2.name = "ykd";
    p2.age = 18;
    p2.heigth = 180;

    //3.先定义再一次性初始化
    struct Person p3;
    p3 = (struct Person){"lisi",18,180};

    //注意:结构体和数组在这里的区别,数组不能先定义再进行一次性初始化
    //结构体要明确的告诉系统{}中是一个结构体

    //4.指定将数据赋值给指定的属性
    struct Person p4 = {.heigth=1.77, .name="wangwu", .age=33};


    //如何从结构体中取数据?
    printf("name=%s,age=%i,heigth=%f\n",p4.name,p4.age,p4.heigth); //name=wangwu,age=33,heigth=1.770000


    return 0;
}
### C/C++ 结构体数组初始化方法 #### 使用传统方式初始化结构体数组 在C/C++中,可以直接按照定义的顺序来初始化结构体数组。下面是一个简单的例子: ```cpp #include <iostream> #include <string> using namespace std; // 定义Worker结构体 struct Worker { int number; int age; string post; }; int main() { // 创建并初始化三个Worker类型的对象组成的数组 Worker workers[] = { {1, 25, "工程师"}, {2, 30, "设计师"}, {3, 27, "产品经理"} }; // 输出第一个worker的信息作为示范 cout << "工号:" << workers[0].number << endl; cout << "年龄:" << workers[0].age << endl; cout << "职位:" << workers[0].post << endl; } ``` 此代码展示了如何一次性给整个结构体数组赋初值[^1]。 #### 利用指定成员名的方式初始化(适用于GCC/G++) 对于支持GNU扩展特性的编译器如GCC,在声明结构体数组的同时还可以采用命名字段的方式来设置特定位置上的元素值,这使得即使跳过某些项也能正确初始化其余部分的数据[^2]: ```cpp enum PositionIndex { ENGINEER=0, DESIGNER, PM }; static const Worker teamMembers[] = { [ENGINEER] = {.number=1,.age=29,.post="高级软件开发人员"}, [DESIGNER] = {.number=2,.age=32,.post="UI/UX设计专家"}, }; ``` 这种方式不仅提高了可读性和维护性,而且允许更灵活地控制哪些成员被赋予初始值[^4]。 #### 动态分配内存并初始化结构体数组 当不知道确切大小或者希望运行时决定数组长度时,则需借助动态内存管理函数`new`或`malloc()`来进行操作: ```cpp #include <cstdlib> // For malloc and free on C++ // 或者 #include <stdlib.h> 对于纯C程序来说 ... size_t count = /* 获取实际数量 */; Worker* dynamicWorkers = (Worker*)malloc(count * sizeof(Worker)); if (!dynamicWorkers) exit(-1); for(size_t i = 0 ;i<count;++i){ // 假设有一个填充单个工作者的辅助函数fill_worker() fill_worker(&dynamicWorkers[i]); } ... free(dynamicWorkers); ``` 上述片段说明了怎样申请一块连续空间用于存储多个相同类型的记录,并逐个完成它们各自的初始化过程.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值