linux内核结构体数组,Linux中数组与结构体的快捷初始化

最近看了linux内核的一点代码,感受颇深,由于自己知识的匮乏,有些用法以前都没有见过,现在就把数组和结构体初始化的部分简单的记录一下。那么怎么快捷方便的对数组和结构体进行初始化呢?

一、数组快捷初始化

我们使用的方法有这么几种:

(1) int an_temp[10] = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};    //初始化成指定数据到数组

或者

(2)int an_temp[10]; memset(an_temp,0,sizeof(int)*10); //数组清零

果如数组到长度是128或者更大呢?对于方法二还是可以接受的,若使用方法一把数组初始化成指定内容该怎么办?用循环?有其他方法吗?还有其他方法吗?那么我们就来说一下:

int an_temp[128] = {[0 ... 127] = -1};

对,你们没有看错,就是这样,简单吧!www.linuxidc.com 有兴趣到朋友可以做个简单到例子。

#include

int main()

{

int an_temp[128] = {[0 ... 127] = -2};

int i = 0;

for(i=0;i<128;i++)

printf("%d\n",an_temp[i]);

return 0;

}

二、结构体的初始化

我们用以下结构体为例子:

struct struct_temp

{

int dd;

int cc[128];

};

我们平常到初始化是这个样子的:

(1) struct struct_temp st_temp;

memset(&struct_temp,0,sizeof(struct struct_temp));

或者

(2)struct struct_temp st_temp;

st_temp.dd = -1;

int i =0;

for(i=0;i<128;i++)

st_temp.cc[i] = -1;

对于第二种方法,有没有更方便到呢?当然有,如下:

struct struct_temp st_temp = {.dd=-1, .cc[0 ... 127] = -2};

这种方法我们都可以调换初始化的顺序,如下:

struct struct_temp st_temp = {.cc[0 ... 127] = -2, .dd=-1};

三、结构体数组的初始化

数组到快捷初始化,结构体到初始化都了解了,那么结构体数组到初始化呢?就是以上两种方法到组合。感兴趣的朋友可以自己写个小例子,这里我就不说了,免的大家嫌我罗嗦。哈哈。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux,machine数组是一个用于存储支持的硬件平台信息的数组。它定义在`arch/x86/kernel/machine_kexec.c`文件。该数组的每个元素都是一个结构体,包含了特定硬件平台的相关信息。 这些信息包括硬件平台的名称、处理器类型、内存布局、断控制器等。通过这些信息,Linux内核可以根据不同的硬件平台进行适配和配置。 machine数组的定义如下: ``` struct machine_desc { const char *name; // 硬件平台的名称 const char *alias; // 硬件平台的别名 const char *probe_type; // 硬件平台的探测类型 const char *dt_compat; // 设备树兼容性字符串 void (*init_irq)(void); // 断控制器初始化函数 void (*init_machine)(void); // 硬件平台初始化函数 void (*init_late)(void); // 后期初始化函数 void (*init_early)(void); // 早期初始化函数 void (*init_time)(void); // 时间子系统初始化函数 void (*init_irqchip)(void); // 断芯片初始化函数 void (*init_heartbeat)(void); // 心跳初始化函数 void (*init_pci)(void); // PCI子系统初始化函数 void (*init_pci_early)(void); // 早期PCI子系统初始化函数 void (*init_pci_dma)(void); // PCI DMA初始化函数 void (*init_apic_mappings)(void); // APIC映射初始化函数 void (*init_topology)(void); // 拓扑结构初始化函数 void (*init_memory_mapping)(void); // 内存映射初始化函数 void (*init_memory_mapping_late)(void); // 后期内存映射初始化函数 void (*init_mem_mapping)(void); // 内存映射初始化函数 void (*init_mem_mapping_late)(void); // 后期内存映射初始化函数 void (*init_early_late_memtest)(void); // 早期和后期内存测试函数 void (*init_early_late_memtest_late)(void); // 后期内存测试函数 void (*init_early_late_memtest_end)(void); // 内存测试结束函数 void (*init_early_late_memtest_end_late)(void); // 后期内存测试结束函数 }; ``` 每个硬件平台都会在该数组注册一个对应的结构体,以便在系统启动时被正确地初始化和配置。通过这种方式,Linux内核可以支持多种不同的硬件平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值