C语言初始化一个结构体的时候,并不是是否每个成员都需要初始化,那没有初始化的量值为多少呢?

在C语言中,初始化结构体时并不是必须为每个成员显式地赋值。如果某些成员没有被显式初始化,编译器会按照一定规则为这些成员赋默认值。

  • 静态或全局变量会被自动初始化为零(如果是指针类型值为NULL,NULL表示空指针)。
  • 局部变量如果没有显式初始化,未被初始化的成员会包含未定义值(随机值)。

比如下面这个结构体:

typedef struct InputDevice {
	char *name;
	int (*GetInputEvent)(PInputEvent ptInputEvent);
	int (*DeviceInit)(void);
	int (*DeviceExit)(void);
	struct InputDevice *ptNext;
}InputDevice, *PInputDevice;

我初始化的代码可否不初始化成员ptNext,即像下面这样初始化:

static InputDevice g_tTouchscreenDev ={
	.name = "touchscreen",
	.GetInputEvent  = TouchscreenGetInputEvent,
	.DeviceInit     = TouchscreenDeviceInit,
	.DeviceExit     = TouchscreenDeviceExit,
};

此时由于 g_tTouchscreenDev 是一个全局变量或静态变量(注意:前面的static并不一定是表示这个变量是静态变量,也有可能表明这个全局变量只在当前文件内有效),则ptNext会被初始化为空指针,即值为 #define NULL (void *)0

当然,最好是显式指定,所以上面这个结构体实例化严格地说,应该是像下面这样写:

static InputDevice g_tTouchscreenDev = {
    .name = "touchscreen",
    .GetInputEvent  = TouchscreenGetInputEvent,
    .DeviceInit     = TouchscreenDeviceInit,
    .DeviceExit     = TouchscreenDeviceExit,
    .ptNext         = NULL,
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值