我在学习usb驱动程序的时候发现了一下代码,我们可以在Linux-2.6.x/drivers/usb/storage/usb.c中找到这样一个结构体初始化项目:
usb驱动设备的核心结构体
static struct usb_driver usb_storage_driver = {
.owner = THIS_MODULE,
.name = "usb-storage",
.probe = storage_probe,
.disconnect = storage_disconnect,
.id_table = storage_usb_ids,
};
第一种作用
看到这个结构体我有些没看懂,因为这不是我们一般看到的结构体的定义方式,后来查资料发现这是linux2.6内核等方式的C99标准的定义方式。举个例子:
struct book {
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
例如上面这个结构体,我们在调用时可以:
struct book A1{
char title="Rue for the Toad";
char author="James Broadfool";
float value=25.99;
};
1.这样初始化,我们都能看的懂,但在linux内核中有些结构体的定义参数比较多,而我们要实例化一个结构体但只用其中的部分参数我们不可能全部写出来初始化,所以用到了.运算符,例如
struct book A2 = { .value = 10.99 };
2.这样初始化既可以只初始化部分变量,也可以无顺序的初始化:
struct book A3 = { .value = 18.90, .author = "Philionna pestle", 0.25};
3.上面的这个初始化方式不仅用到了混序的初始化方式,后面的0.25我们在原定义中可以看出author后面的变量为value,因此0.25赋值给value,所以这个结构体初始化后value值为0.25
第二种作用
当然.运算符在结构体中也有其常用的作用
1.最基础的当然是一个结构体实例化后的变量引用
struct book{
char*name[2012];
long price;
char*pub[32];
}CGramer;
//变量引用
CGramer book_1;
book_1.name="C++Primer";
book_1.price=129;
book_1.pub="人民邮电出版社";