数组的默认值

Ver*_*333 -4 c++ multidimensional-array

我好奇.当我尝试打印时,这些未定义的值如何被翻过来?

我认为未定义的数组的值等于0.

码:

#include <iostream>
#include <stdio.h>
using namespace std;

int main() {
// your code goes here

int log[][4];
int addOne=0;

for(int i=0;i<7;i++)
{
    log[addOne][0]=11+i;
    log[addOne][1]=11+i;
    //log[addOne][2]=11+i;
    log[addOne++][3]=11+i;
}

for(int i=0;i<11;i++)
{
printf("log[%d][0] = %d\n", i, log[i][0]);
printf("log[%d][1] = %d\n", i, log[i][1]);
printf("log[%d][2] = %d\n", i, log[i][2]);
printf("log[%d][3] = %d\n", i, log[i][3]);
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

log[0][0] = 11
log[0][1] = 11
log[0][2] = 1
log[0][3] = 11
log[1][0] = 12
log[1][1] = 12
log[1][2] = -1217403463
log[1][3] = 12
log[2][0] = 13
log[2][1] = 13
log[2][2] = -1081953076
log[2][3] = 13
log[3][0] = 14
log[3][1] = 14
log[3][2] = -1081953088
log[3][3] = 14
log[4][0] = 15
log[4][1] = 15
log[4][2] = -1216726312
log[4][3] = 15
log[5][0] = 16
log[5][1] = 16
log[5][2] = -1219603196
log[5][3] = 16
log[6][0] = 17
log[6][1] = 17
log[6][2] = 6
log[6][3] = 17
log[7][0] = -1216729360
log[7][1] = -1216729468
log[7][2] = -1081952888
log[7][3] = -1217105850
log[8][0] = -1216726312
log[8][1] = -1216764868
log[8][2] = -1216758952
log[8][3] = 0
log[9][0] = -1217100393
log[9][1] = -1216548864
log[9][2] = -1216546512
log[9][3] = 1
log[10][0] = -1081952912
log[10][1] = -1216623457
log[10][2] = -1216546072
log[10][3] = -1217997256
Run Code Online (Sandbox Code Playgroud)

有没有办法将0值初始化为每个索引?

Iha*_*imi 6

非常简单

int log[][4] = {{0}};
Run Code Online (Sandbox Code Playgroud)

但是你的代码会非常错误,因为你没有为这么多的值1分配足够的空间,因此它会调用未定义的行为.

如果你想要,你需要

#include <stdio.h>

int
main(void)
{
    int values[11][4] = {{0}};
    int addOne = 0;

    for (int i = 0 ; i < 7 ; i++) {
        values[addOne][0] = 11 + i;
        values[addOne][1] = 11 + i;
        values[addOne++][3] = 11 + i;
    }

    for (int i = 0 ; i < 11 ; i++) {
        printf("values[%d][0] = %d\n", i, values[i][0]);
        printf("values[%d][1] = %d\n", i, values[i][1]);
        printf("values[%d][2] = %d\n", i, values[i][2]);
        printf("values[%d][3] = %d\n", i, values[i][3]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且不要log用作标识符,因为它是math.h头文件的自然对数函数.

未初始化的2值不会自动初始化,0除非它们已声明static,或者它们位于全局范围内.这样做是出于性能原因,将值初始化0为覆盖零会带来不必要的工作,你应该感谢你只能用最终值初始化值.

strings.h标题中有一个函数可以执行此操作,但0除了字符数组之外,它几乎不用.那是因为你可以设置任意数量的字节,因此你不能将值设置为具有这种功能1ints 数组中的每个元素,例如,它是

void *memset(void *s, int c, size_t n);
Run Code Online (Sandbox Code Playgroud)

尽管第二个参数是一个int它只能设置字节,确切地说是n字节.

同样重要的是要提的,是由@上你的问题的意见user3386109 这里与@ NathanOliver 在这里指出,你不能真正做到这一点

int values[][4];
Run Code Online (Sandbox Code Playgroud)

因为这样就无法知道数组的大小.您应该指定缺少的大小,或者像我在本答案开头一样添加初始化程序.这是结果,当然还有非法语法.


1 因为它是一个大小为1的数组1的数组

2 未定义,这是另一回事