#include <stdio.h>
int main(){
int b = 10,a;
if (a = 5){
printf("%d",b);
}
}
在上面的程序中if语句总是返回true,即使我改变了变量的数据类型&#34; a&#34;来自&#34; int&#34;到&#34; char&#34;。
if语句中的含义是什么?
答案 0 :(得分:3)
=
是C中的assignment operator
。根据C99 6.5.16:
赋值运算符将值存储在由指定的对象中 左操作数。 赋值表达式的值为left 赋值后的操作数,但不是左值。
这意味着表达式a = 5
将返回5
,因此将执行if
块内的指令。相反,如果您将其替换为a = 0
,则0
将由赋值表达式返回,并且if
内的指令将不会被执行。
答案 1 :(得分:2)
单个=表示赋值运算符,表示您正在更改 a 的值并在if语句中使用此值。
<EditText
android:id="@+id/edit_text_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/edit_text_password"
android:theme="@style/EditText.Colored"
android:hint="@string/hint_enter_login"
android:inputType="textEmailAddress" />
是相同的:
if(a = 5) {
// some code
}
==表示逻辑等价的操作,如果两个值相同则返回1,如果它们不相同则返回0。
答案 2 :(得分:1)
单1> INTERNAL COMPILER ERROR in 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe'
1> Please choose the Technical Support command on the Visual C++
1> Help menu, or open the Technical Support help file for more information
会将值5分配给=
。如果赋值值的计算结果为true(即不为0,则为null等),则赋值将为true。如果它的计算结果为true,则该函数将分支到a
语句块。还有if
获得价值5的副作用。
答案 3 :(得分:1)
所以:
因此你应该使用&#34; ==&#34;其他朋友告诉if语句中的运算符。
答案 4 :(得分:0)
请注意,在C中,允许在布尔表达式中使用赋值运算符。因为=因为赋值必须是一个不同于= for comparisson的符号。
因为在诸如BASIC之类的语言中,程序员是否意味着赋值或比较,所以不会混淆,BASIC对这两个含义使用相同的符号:
C:
if ((a=5)==5) ... // a is set to 5 and then compared to 5
基本:
a = 5 ' assignment
If (a = 5) Then ' comparison