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

时间:2017-01-27 21:47:31

标签: c pointers

我编写了一些小东西来理解指针是如何工作的并且已经达到了问题。 我有一个布尔指向"有效"在名为" main.c":

的文件中
progressBackgroundTint

指针的地址被传递给名为" test.c":

的第二个文件中的方法
bool *valid;

" test.c"方法我将valid设置为true:

method(&valid);

方法调用" main.c"我在两个if语句中取消引用是有效的,看看它是真还是假:

*valid = true;

两个陈述都打印出来,但只有"有效是真的"应该。这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

如果<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="cart-container"> <button class="cart-toggle">Toggle</button> <div class="cart">cart</div> </div> <p>Click the "Toggle" button to show/hide the cart.</p>的声明确实是valid,那么在bool *函数中,您已声明某些内容指向 a {{1} }而不声明main本身。在初始化之前,它最初将指向一个不可预测的内存位置。

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

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