我编写了一些小东西来理解指针是如何工作的并且已经达到了问题。 我有一个布尔指向"有效"在名为" main.c":
的文件中progressBackgroundTint
指针的地址被传递给名为" test.c":
的第二个文件中的方法bool *valid;
" test.c"方法我将valid设置为true:
method(&valid);
方法调用" main.c"我在两个if语句中取消引用是有效的,看看它是真还是假:
*valid = true;
两个陈述都打印出来,但只有"有效是真的"应该。这可能是什么问题?
答案 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会导致这些假设失败,并可能导致bool
和bool
被视为“真实”。
您要做的是将!
声明为value
函数中的普通!value
。此声明实际上将为valid
分配空间,而不是将空间分配给指向 bool
而不分配main
本身。然后,bool
接受bool
,当它bool
时,它会将method
分配给在bool *
的堆栈上声明的*valid = true