C int arr=1&;时代码崩溃&;arr;但不是int-arr=0&&;arr;

C int arr=1&;时代码崩溃&;arr;但不是int-arr=0&&;arr;,c,C,我想知道为什么下面的代码会崩溃 int main( ) { int arr = 1 && arr; return 0; } 但不能使用下面的代码 int main( ) { int arr = 0 && arr; return 0; } 提前感谢0&&arr 由于0,上述表达式为假,因此未检查arr,这与1&&arr不同,其中必须检查arr以评估表达式的值 你应该试试: int main(){ int a

我想知道为什么下面的代码会崩溃

int main( ) 
{  
    int arr = 1 && arr;
    return 0; 
}
但不能使用下面的代码

int main( ) 
{  
    int arr = 0 && arr;
    return 0; 
}
提前感谢

0&&arr

由于
0
,上述表达式为假,因此未检查
arr
,这与
1&&arr
不同,其中必须检查
arr
以评估表达式的值


你应该试试:

int main(){
  int a = 0 && printf("a"); //printf returns number of characters printed, 1
  int b = 1 && printf("b");
  return 0;
} 

因为布尔表达式的短路计算。在第一个示例中,&&运算符的左侧求值为true,因此右侧求值。在第二种情况下,左侧为false,因此永远不会计算右侧。

崩溃?你说的“撞车”是什么意思?您使用的是什么平台,如果它在使用未初始化的
int
进行操作时“崩溃”?Andrey,这对我来说也很奇怪(尽管
arr
的值不确定,但我希望程序继续运行),但标准()规定,只要读取该值就会调用未定义的行为:C99 J.2(未定义的行为):“具有自动存储持续时间的对象的值在其不确定时使用。”我在VS2005中尝试了这两个函数-尽管第一个函数给出了编译警告,但对我来说,它们都不会在运行时崩溃。