将所有值分配给结构有什么意义

Is there any point in assigning all values to a struct?

本文关键字:什么 结构 分配      更新时间:2023-10-16

我最近在试验SendInput,发现一切都按预期工作,而无需为结构分配其他值

#include <Windows.h>
int main(int argc, char *argv[]) {
    INPUT input;
    input.type = 1;
    input.ki.wVk = 0x41;
    SendInput(1, &input, sizeof(INPUT));
    return EXIT_SUCCESS;
}

如果您看一下我正在使用的 INPUT 结构的 MSDN 定义,它还有许多其他变量(除了 typewVk 是我设置的唯一变量)。

为该结构中的所有其他字段添加类似于input.ki.dwExtraInfo = 0;的内容有什么意义吗?我假设,默认情况下,当您分配结构时,它会将零写入内存,因此设置这些变量没有意义?

局部变量(以及局部结构变量的扩展成员)未初始化,因此尝试读取或写入它们会导致未定义的行为。

它恰好在这种情况下有效,但你不能依赖它。

话虽如此,此结构的字段可能全部为 0,因为它是 main 函数的本地字段,进程的内存可能在启动之前已清除,并且变量不会超出程序生命周期的范围,因此它在堆栈上使用的空间不会被其他任何东西使用。

但同样,这是一个不能依赖的实现细节。 所以最好显式初始化所有值。

您不必分配变量,但我认为最好实例化为 0null ,并在get这些变量时沿途设置检查点。在我看来,它使您的代码更加健壮,因为您永远不会忘记已实例化的内容和未实例化的内容。

此外,否,默认情况下,如果未实例化值,则不会将其写入内存中。