在C中,为什么" int MAX = 10 ^ 6 ... int arr [MAX]"没有崩溃,但" int MAX = 1000000 ... int arr [MAX]"崩溃了?

时间:2016-01-11 04:46:32

标签: c arrays

我目前正在使用C并遇到了一些我觉得有趣的东西,但似乎无法在这里找到类似的东西。

我正静态地为数组分配内存(大小为1000000)。我知道这很大,有可能引发问题。但是,使用10 ^ 6导致没有问题,而1000000导致崩溃,可能是由于巨大的尺寸。我想知道如果我继续使用10 ^ 6,是否会出现任何限制。

int main() {
    int i, n, MAX = 10^6; //change 10^6 to 1000000 to cause crash
    int highest, newHighest, lowest, profit, newProfit;
    int arr[MAX];

    return 0;
}

我已确认我的代码在第4行崩溃。任何信息都将受到赞赏。

由于

***编辑分号

2 个答案:

答案 0 :(得分:5)

int i, n, MAX = 10^6 //change 10^6 to 1000000 to cause crash;

10^6不是您认为的那样。 ^运算符在c中是按位XOR。10^6不是1000000

如果您打印10^6,则等于12,并且没有理由崩溃。

答案 1 :(得分:0)

^是一个不用于幂(指数)的按位运算符

使用pow功能。这需要双打才能实现。

因为您使用了按位运算符,所以您实际上从未获得过那么大的数字。所以程序永远不会崩溃。