linux kernel 结构体赋值方法{转载}
原文地址:
http://www.chineselinuxuniversity.net/articles/48226.shtml
这几天看Linux的内核源码,突然看到init_pid_ns这个结构体变量的赋值特别奇怪。 view plainprint? struct pid_namespace init_pid_ns = { .kref = { .refcount = ATOMIC_INIT(2), }, .pidmap = { [ 0 ... PIDMAP_ENTRIES-1] = { ATOMIC_INIT(BITS_PER_PAGE), NULL } }, .last_pid = 0, .level = 0, .child_reaper = &init_task, }; 请注意上面代码的.pidmap这个结构体数组的赋值形式。 view plainprint? [ 0 ... PIDMAP_ENTRIES-1] 直接拿索引来赋值,而且直接写出了索引的范围。有点python的味道。
只是记得C语言的函数的可变参数是用的...的方式。没想过结构体也有这种操作方式。
比较感兴趣,自己写了一小段类似的代码。
#include <stdio.h>
struct pid{
int val;
void *fn;
};
struct str{
int val;
struct pid id[];
};
struct str init_str = {
.val = ,
.id = { [ ... ] = {, NULL} },
};
int main(void){ int i;
for(i = ; i < ; i++) printf("init_str.id[%d].val = %d\n", i, init_str.id[i].val);
return ;
}
编译后测试。结果的确是这样。
如果要对结构体数组进行操作,这种方式可以试试。
下面的代码是自己写的测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//use the linux kernel struct init method
// Write by sndnvaps<sndnvaps@gmail.com>
//struct stu {
// int age;
// float tall;
// char Address[256];
// char CellPhone_num[30];
// char sex[5];
// };
//
// *****************
// init the struct
// ****************
// struct stu stu_one = {
// .age = 18,
// .tall = 175.6,
// .Address = "GuangZhou,GuangDong,China",
// .CellPhone_num = "189xxxxxxxx",
// .sex = "male",
// };
struct stu_info{
int age;
float tall;
char Address[];
char CellPhone_num[];
char sex[];
}; struct stu_info stu = {
.age = ,
.tall = 175.6,
.Address = "GuangZhou, GuangDong, China",
.CellPhone_num = "189xxxxxxxx",
.sex = "male",
}; bool check_age(struct stu_info *stu) {
if (stu->age >= ) {
return true;
}
return false;
} int main(int argc, char *argv[]) {
bool is_eightheen = false;
is_eightheen = check_age(&stu);
printf("infomation of stu one ....\n");
printf("Age = %d\n", stu.age);
printf("Tall = %f\n", stu.tall);
printf("Address = %s\n", stu.Address);
if (is_eightheen) { printf("Cellphone number = %s\n", stu.CellPhone_num);
} else {
printf("this male under 18, not show the cellphone number..\n");
} printf("Sex = %s\n", stu.sex);
return ;
}
linux kernel 结构体赋值方法{转载}的更多相关文章
- C语言中结构体赋值问题的讨论(转载)
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- c语言结构体赋值问题
对于结构体赋值问题: static psl{ int a; char ch; }; 我过去一般会对结构体这样赋值: static psl pslname = { , 'b', }; 记住有一点,‘b’ ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- Go part 5 结构体,方法与接收器
结构体 结构体定义 结构体的定义只是一种内存布局的描述(相当于是一个模板),只有当结构体实例化时,才会真正分配内存空间 结构体是一种复合的基本类型,通过关键字 type 定义为 自定义 类型后,使结构 ...
- go 结构体与方法
go 结构体与方法 go 结构体相当于 python 中类的概念,结构体用来定义复杂的数据结构,存储很多相同的字段属性 结构体的定义 1.结构体的定义以及简单实用 package main imp ...
- go结构体与方法
go结构体相当于python中类的概念 结构体用来定义复杂的数据结构,存储很多相同的字段属性 1.结构体的定义以及简单实用 package main import ( "fmt" ...
- Go 语言 结构体和方法
@ 目录 1. 结构体别名定义 2. 工厂模式 3. Tag 原信息 4. 匿名字段 5. 方法 1. 结构体别名定义 变量别名定义 package main import "fmt&quo ...
- Go基础3:函数、结构体、方法、接口
目录 1. 函数 1.1 函数返回值 同一种类型返回值 带变量名的返回值 函数中的参数传递 函数变量 1.2 匿名函数--没有函数名字的函数 在定义时调用匿名函数 将匿名函数赋值给变量 匿名函数用作回 ...
- C语言中结构体赋值问题的讨论
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
随机推荐
- HDU1176:免费馅饼(DP)
Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁 ...
- 设备管理 USB ID
发现个USB ID站点,对于做设备管理识别的小伙伴特别实用 http://www.linux-usb.org/usb.ids 附录: # # List of USB ID's # # Maintain ...
- java多线程12设计模式
1.Single Threaded Execution Pattern(单线程运行模式) 2.Immutable Pattern(一成不变的模式) 3.Guarded Suspension Patte ...
- poj3177(边双连通分量+缩点)
传送门:Redundant Paths 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立 ...
- nyoj 130 同样的雪花 【哈希】
同样的雪花 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 You may have heard that no two snowflakes are alike. ...
- 复习面向对象的OOA、OOD、OOP
复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,依照面向对象的思想来分析问题. OOA与结构化 ...
- 腾讯视频QLV格式转换mp4的方法
腾讯视频QLV格式转换mp4的方法不知道大家知不知道用?喜欢用腾讯视频的朋友应该都知道腾讯视频单独搞出了个QLV格式文件,只能用腾讯独有的腾讯视频软件才能播放,就算用格式工厂转换也不行,那么腾讯视频的 ...
- WebService之Soap头验证入门
1.新建一个类,如"AuthHeaderUser",继承于"System.Web.Services.Protocols.SoapHeader"类 2.新建Web ...
- Eclipse中的SVN的冲突解决方案详解
版本冲突原因: 假设A.B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns ...
- JS正则验证邮箱的格式
一.相关的代码 1 function test() 2 { 3 var temp = document.getElementById("text ...