有以下声明
int array[ROW][COLUMN]={0};
Run Code Online (Sandbox Code Playgroud)
我得到所有零的数组,但使用下面的一个
int array[ROW][COLUMN]={1};
Run Code Online (Sandbox Code Playgroud)
我没有得到所有值的数组.默认值仍为0.
为什么会出现这种情况?如何使用所有1进行初始化?
编辑:我刚刚理解使用memset值为1,将每个字节设置为1,因此每个数组单元格的实际值不会是1但是16843009.如何将其设置为1?
关于C中的多维数组,我已经看过几十个关于"我的代码有什么问题"的问题.出于某种原因,人们似乎无法理解这里发生的事情,所以我决定回答这个问题作为对其他人的参考:
如何在C中正确设置,访问和释放多维数组?
如果其他人有有用的建议,请随时发布!
如何初始化使用malloc分配的动态数组?我可以这样做:
int *p;
p = malloc(3 * sizeof(*p));
p = {0, 1, 2};
...
free(p);
Run Code Online (Sandbox Code Playgroud)
或者我需要做这样的事情:
int *p, x;
p = malloc(3 * sizeof(*p));
for (x = 0; x < 3; x++)
p[x] = 0;
...
free(p);
Run Code Online (Sandbox Code Playgroud)
或者有更好的方法吗?
我之前使用过C(嵌入式东西),我可以像这样初始化我的数组:
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
Run Code Online (Sandbox Code Playgroud)
即我可以在初始化程序中指定索引.目前我正在学习Qt/C++,我无法相信这在C++中是不受支持的.
我有这个选项:-std=gnu++0x,但无论如何它不受支持.(我不知道它是否在C++ 11中受支持,因为Qt在gcc 4.7.x中工作有问题)
那么,它真的不支持C++吗?或者也许有办法启用它?
UPD:目前我想初始化const数组,所以std::fill不行.
我有一个很大的阵列:
int* arr = new int[BIGNUMBER];
Run Code Online (Sandbox Code Playgroud)
如何用1号码快速填充它.通常我会这样做
for(int i = 0; i < BIGNUMBER; i++)
arr[i] = 1
Run Code Online (Sandbox Code Playgroud)
但我认为这需要很长时间.
我可以使用memcpy或类似吗?
可能重复:
如何在C中
初始化一个int初始化数组
我想知道初始化一个int数组只包含-1值的最快/最简单的方法.我需要的数组是90英特长,所以直截了当的方法应该像这样初始化它:
int array[90]={-1, -1, -1, ...};
Run Code Online (Sandbox Code Playgroud)
但我只想使用一次数组,所以我想能够动态地使用它,并且能够在程序中使用它后释放它,所以我更喜欢快速的方式calloc,但不是零,而是-1课程.