什么" ="而不是" =="是否在c语句中表示?

时间:2015-09-03 11:37:55

标签: c if-statement

#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语句中的含义是什么?

5 个答案:

答案 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;如果检查值不为零,则语句判定为真

所以:

  • &#34; if(a = 0)&#34;返回false
  • &#34; if(a = x)其中x!= 0&#34;返回true

因此你应该使用&#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