1. 数组的静态初始化
我们都知道,一维数组的静态初始化可以写成
int A[] = {1,2,3,4};
其实,可以指定数组元素进行初始化,比如
int a[] = {
[0] = 1,
[1] = 2,
[2] = 3
};
这种技巧在某些情况下其实很有用:(1)只想初始化数组中一些非连续的元素,其它元素都为0;(2)需要根据一组#define作为数组下标来保持某种映射关系的时候,就此我们举个例子。
比如要定义一组错误码和错误码提示的字符串,我们可以用#define来定义错误码,将错误码作为错误提示字符串数组的下标,
/* 错误码定义 */
#define EINVAL 1
#define ENOMEM 2
#define EFAULT 3
/* 错误提示字符串 */
char *err_str[] = {
[0] = "Success",
[EINVAL] = "Invalid arguments",
[ENOMEM] = "Not enough memory",
[EFAULT] = "Bad address"
};
对于这种情况,我们改变#define的值,都可以对err_str可以方便地不用做任何修改地使用索引。
2. 结构体的静态初始化
我们可以用字段名称对结构体进行初始化,这种方法在Linux内核源代码中使用非常普遍,比如
static const struct file_operations mycdev_fops = {
.owner = THIS_MODULE,
.read = mycdev_read,
.write = mycdev_write,
.open = mycdev_open,
.release = mycdev_release,
.llseek = mycdev_llseek,
.unlocked_ioctl = mycdev_unlocked_ioctl,
.mmap = mycdev_mmap,
};
这段代码常用于字符设备驱动程序的设计中,owner、read等都是struct file_operations的成员变量(数据类型是函数指针),这里直接使用字段名称完成函数指针类型的结构体成员的初始化。
再给个简单的例子,定义坐标,
struct point {
int x;
int y;
int z;
}
我们可以这样初始化struct point,
struct point p = {.x = 3, .y = 4, .z = 5};
这种使用字段名进行初始化的方法同样适用于union类型。
分享到:
相关推荐
2.1 C语言的数据类型 14 2.2 常量与变量 15 2.2.1 标识符命名 15 2.2.2 常量 16 2.2.3 变量 16 2.3 整型数据 16 2.3.1 整型常量 16 2.3.2 整型变量 17 2.4 实型数据 18 2.4.1 实型常量 18 2.4.2 实型变量 18 2.5 ...
3.3 字符和char数据类型 3.4 int数据类型 3.5 整数类型short、long和unsigned 3.6 浮点类型 3.7 typedef的用法 3.8 sizeof操作符 3.9 使用getchar()和putchar() 3.10 数学函数 3.10.1 使用abs()和fabs() ...
2.1 C语言的数据类型 14 2.2 常量与变量 15 2.2.1 标识符命名 15 2.2.2 常量 16 2.2.3 变量 16 2.3 整型数据 16 2.3.1 整型常量 16 2.3.2 整型变量 17 2.4 实型数据 18 2.4.1 实型常量 18 2.4.2 实型变量 18 2.5 ...
2.1 C语言的数据类型 14 2.2 常量与变量 15 2.2.1 标识符命名 15 2.2.2 常量 16 2.2.3 变量 16 2.3 整型数据 16 2.3.1 整型常量 16 2.3.2 整型变量 17 2.4 实型数据 18 2.4.1 实型常量 18 2.4.2 实型变量 18 2.5 ...
还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。 编程环境:vs2010,语言:...
12.4 抽象数据类型Graph和Digraph 370 12.5 无向图和有向图的描述 371 12.5.1 邻接矩阵 371 12.5.2 邻接压缩表 373 12.5.3 邻接链表 374 12.6 网络描述 375 12.7 类定义 376 12.7.1 不同的类 376 12.7.2 邻接矩阵类 ...
3.1 C语言的数据类型 32 3.2 常量与变量 33 23.2.1 常量和符号常量 33 3.2.2 变量 33 3.3 整型数据 34 3.3.1 整型常量的表示方法 34 3.3.2 整型变量 35 3.4 实型数据 37 3.4.1 实型常量的表示方法 37 3.4.2 实型...
C语言程序设计;;§10.1 结构体概念 数据的基本类型:整、实、字符。 数组是构造类型:每个元素为同一类型 有些问题仅用基本类型和数组来描述,无法反映其内在联系,如学生情况。 ;id;定义结构体类型变量的...数据类型
060.MFC_初始化_ADO.mp4 061._数据库连接.mp4 062.MFC_ADO_MSSQL_Select.mp4 063.MFC_MiniMS_1.mp4 064.MFC_MiniMS_2.mp4 065.MFC_MiniMS_3.mp4 066.WS_Socket_编程原理.mp4 067.WS_TCP_Socket.mp4 068.WS_...
实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。 各实参之间用逗号分隔。'Next of Page在C语言中,可以用以下几种方式调用函数: 1.函数表达式 函数作表达式中的一项出现在表达式中,以函数...
2.1 C语言的数据类型 14 2.2 常量与变量 15 2.2.1 标识符命名 15 2.2.2 常量 16 2.2.3 变量 16 2.3 整型数据 16 2.3.1 整型常量 16 2.3.2 整型变量 17 2.4 实型数据 18 2.4.1 实型常量 18 2.4.2 实型变量 18 2.5 ...
书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
18.1.3 共用体数据类型 184 18.2 局部变量和全局变量 187 18.2.1 局部变量 187 18.2.2 全局变量 188 18.3 变量的存储类别 191 18.3.1 动态存储方式和静态存储方式 191 18.3.2 auto变量 192 18.3.3 用static...
1.8 如何在C中实现不透明(抽象)数据类型? 1.9 如何生成“半全局变量”,就是那种只能被部分源文件中的部分函数访问的变量? 存储类型 1.10 同一个静态(static)函数或变量的所有声明都必需包含static存储类型...
3.1 C语言的数据类型 32 3.2 常量与变量 33 23.2.1 常量和符号常量 33 3.2.2 变量 33 3.3 整型数据 34 3.3.1 整型常量的表示方法 34 3.3.2 整型变量 35 3.4 实型数据 37 3.4.1 实型常量的表示方法 37 3.4.2 实型...