小编San*_*kin的帖子

访问绑定的未定义行为之外的全局数组?

我今天刚上课了 - 阅读C代码和输入,如果程序实际运行,所需答案就是屏幕上显示的内容.其中一个问题被声明a[4][4]为一个全局变量,并且在该程序的一个点上,它试图访问a[27][27],所以我回答了类似" 访问一个超出其边界的数组是一个未定义的行为 ",但老师说它a[27][27]的值将为0.

之后,我尝试了一些代码来检查"所有未初始化的golbal变量是否设置为0"是否为真.好吧,这似乎是真的.

所以现在我的问题是:

  • 似乎已经清除了一些额外的内存并保留了代码运行.保留多少内存?为什么编译器会保留比应该更多的内存,它的用途是什么?
  • a[27][27]0所有环境?

编辑:

在该代码中,a[4][4]唯一声明的全局变量,并且还有一些更多本地变量main().

我在DevC++中再次尝试了该代码.所有这些都是0.但在VSE中并非如此,其中大多数值都是,0但有些值具有Vyktor指出的随机值.

c undefined-behavior

60
推荐指数
7
解决办法
3235
查看次数

"a +++ i"是否等于"(a ++)+ i"

#include <stdio.h>

int main(void) 
{
    int a = 1, i = 3, x, y, z;
    a = 1; i = 3;
    x = a+++i;
    a = 1; i = 3;
    y = a++ + i;
    a = 1; i = 3;
    z = a + ++i;
    printf("%d %d %d", x, y, z);
    scanf(" ");
    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

此代码输出似乎是4 4 5.但为什么a+++i等于a++ + i

是因为编译器总是从左到右阅读源代码?

或者是因为操作遵循优先顺序

并且它在所有编译器上的工作方式是否相同?

c operator-precedence

6
推荐指数
1
解决办法
221
查看次数