gpt4 book ai didi

c - 如何在C中初始化 bool 指针?

转载 作者:行者123 更新时间:2023-11-30 21:00:21 25 4
gpt4 key购买 nike

我正在编写一些小代码来理解指针如何工作并遇到了问题。我在名为“main.c”的文件中有一个由“valid”指向的 bool 值:

bool *valid;

指针的地址被传递给名为“test.c”的第二个文件中的方法:

method(&valid);

在“test.c”方法中,我将 valid 设置为 true:

*valid = true;

在“main.c”中的方法调用之后,我在两个 if 语句中取消引用 valid 来查看它是 true 还是 false:

if (*valid) {
printf("valid is true.\n");
}
if (!(*valid)) {
printf("valid is false.\n");
}

这两个语句都会打印,但只有“valid is true”应该打印。这里可能出现什么问题?

最佳答案

如果 valid 的声明确实是 bool *,那么在 main 函数中,您已经声明了一些指向的内容at 一个 bool 而不声明一个 bool 本身。在您初始化它之前,它最初会指向一个不可预测的内存位置。

当您将其传递给 method 时,假设您的代码可以编译,method 必须接受 bool ** —— 一个指向指向 bool 的指针——因此,当您设置 *valid = true 时,您实际上所做的是在 main 方法中设置 bool * 指针为 true 的值,即 0x0000000000000001。当 main 取消引用指针时,它会读取该内存位置的字节并将它们解释为 bool。属性形成的 bool 必须为 0 或 1,并且编译器在评估诸如 ! 运算符之类的内容时会基于此做出假设 - 因此,该值不为 0 或 1 会导致这些假设不成立,并可能导致 value!value 都被视为“true”。

您想要做的是在 main 函数中将 valid 声明为普通的 bool 。此声明实际上会为 bool 分配空间,而不是在不分配 bool 的情况下将空间分配给bool指向> 本身。然后,method 接受 bool *,当它执行 *valid = true 时,它会将 true 分配给在 main 堆栈上声明的 bool

关于c - 如何在C中初始化 bool 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com