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语言 ...
随机推荐
- linux内核基础(系统调用,简明)
内核基础(系统调用) 在说系统调用之前.先来说说内核是怎么和我们交互的.或者说是怎么和我们产生交集的. 首先,内核是用来控制硬件的仅仅有内核才干直接控制硬件,所以说内核非常重要,假设内核被控制那么电脑 ...
- 实现Runnable接口和扩展Thread使用场景
在上篇博文:java学习笔记-Thread中我们知道创建子线程的两个方式:实现Runnable接口和扩展Thread. 扩展Thread类和实现Runnable接口的使用场景: Thread类定义了派 ...
- EF中的事务处理的初步理解
http://yanwushu.byethost7.com/?p=87 1. EF对事务进行了封装:context的saveChange()是有事务性的. 2. 依赖多个不同的Context的操作(即 ...
- 119 - Greedy Gift Givers
Greedy Gift Givers The Problem This problem involves determining, for a group of gift-giving frien ...
- Struts2中指定的校验文件不起作用的原因
转载请注意出处:http://blog.csdn.net/bettarwang/article/details/39801733 我们知道,假设要为某个Action指定校验文件.那么就要将" ...
- hdu 2451 Simple Addition Expression(数位DP )成败在于细节
亚洲区域赛的题,简单的数位DP题,注重细节. 任何细节都有可能导致wa,所以没有绝对的水题. 把握好细节,此题便A. #include<stdio.h> __int64 getans(__ ...
- 每日算法之三十八:Anagrams
Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...
- 让window命令行支持自己主动补全[相似Linux的Tab键]
打开注冊表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor下 项"CompletionChar"(REG_DWO ...
- JDBC数据库连接
JDBC是什么? Java Data Base Connectivity JDBC是: 以统一方式訪问数据库的API,能够訪问不论什么类型表列数据.特别是存储在关系数据中的数据.JDBC代表Java数 ...
- 什么是gulp?
gulp初涉 1.什么是gulp? gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用 ...