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语言 ...
随机推荐
- HttpGet协议与正则表达
使用HttpGet协议与正则表达实现桌面版的糗事百科 写在前面 最近在重温asp.net,找了一本相关的书籍.本书在第一章就讲了,在不使用浏览器的情况下生成一个web请求,获取服务器返回的内容.于 ...
- linux signal之初学篇
前言 本博文只总结signal的应用,对signal的kernel实现暂不讨论. 1. linux signal是什么? signal是linux提供的用于进程间通信的一种IPC机制. 2. 如何发送 ...
- zoj 2822 Sum of Different Primes (01背包)
///给你n 求他能分解成多少个的不同的k个素数相加之和 ///01背包,素数打表 # include <stdio.h> # include <algorithm> # in ...
- 【web必知必会】—— 图解HTTP(转)good
本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化 ...
- TBDR缺点
TBDR全称Tile-based Deferred Rendering.它是Power VR独特的TBR技术的一种延伸实现手段.TBR/TBDR通过将每一帧画面划分成多个矩形区域,并对区域内的全部像素 ...
- JavaScript 使用Document记录cookie
cookie对于我们使用者来说,有时帮助还是挺大的,比方对于一些不是特别重要的站点,比方公司的測试平台,每次登陆都要手动输入username和password 非常繁琐.所以为了更少的引入其他框架,就 ...
- ubuntu linux 13.04更新
首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 而后用gedit或其他编辑器打开: gksu gedit /et ...
- eval、json.parse()的介绍和使用注意点
原文:eval.json.parse()的介绍和使用注意点 eval和json.parse的使用 eval:来源于官网 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScri ...
- poj3252(数位dp)
题目连接:http://poj.org/problem?id=3252 题意:拆成2进制,在记录0和1的个数 求区间[a,b]中,满足传化成2进制后,0的个数>=1的个数的数字的个数... 分析 ...
- jenkins 集成 redmine 账户验证的方案
jenkins 集成 redmine 账户验证的方案 赖勇浩(http://laiyonghao.com) 动机 Jenkins 是最著名的持续集成工具,又因为它开源免费.插件众多,成为了许多团队做持 ...