C结构体初始化的五种方式

下面代码中的 ByteArray 相关的代码参考这篇文章

struct_test.h

#ifndef struct_tset_h
#define struct_tset_h

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

struct point {
    int x;
    int y;
};

void run_struct_test(void);

#endif

struct_test.c

#include "struct_tset.h"

void run_struct_test(void) {
    //初始化结构体的几种方式
    struct point p1 = { 1, 2 };//顺序比较重要
    struct point p2 = { .y = 4, .x = 2 };//使用成员名称,可以与声明的顺序不一样
    struct point *p3 = &((struct point) { 3, 6 });//字面量,也可以作为函数参数进行传递
    struct point *p4 = malloc(sizeof(struct point));//动态分配内存,记得用free()释放
    p4->x = 4;
    p4->y = 8;
    
    //动态分配内存,但是包含伸缩型数组成员,即创建结构体之前数组长度是不确定的
    //在初始化的时候动态分配额外的存储空间,这种情况也只能使用 malloc() 进行初始化
    int data_length = 10;
    ByteArray *arr = malloc(sizeof(ByteArray) + data_length * sizeof(uint8_t));
    arr->length = data_length;
    for (int i = 0; i < data_length; i++) {
        arr->data[i] = (uint8_t)arc4random_uniform(256);
    }
    const char* hex_str = data_to_hex(arr);
    
    printf("point1=[%d, %d]\n", p1.x, p1.y);
    printf("point2=[%d, %d]\n", p2.x, p2.y);
    printf("point3=[%d, %d]\n", p3->x, p3->y);
    printf("point4=[%d, %d]\n", p4->x, p4->y);
    printf("%s\n", hex_str);
    
    free(p4);
    free((void*)hex_str);
    free(arr);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值