C+中的数组初始化+;(不是字符串) 我在C++中玩数组。我定义了一个名为matrix的2d数组,将提取负值并将其分配给名为array的数组
有没有办法将数组快速初始化为零,而不是枚举所有元素?我浏览了其他帖子和行,比如:C+中的数组初始化+;(不是字符串) 我在C++中玩数组。我定义了一个名为matrix的2d数组,将提取负值并将其分配给名为array的数组,c++,C++,有没有办法将数组快速初始化为零,而不是枚举所有元素?我浏览了其他帖子和行,比如:intarray[10]={}或 int数组[10]={0}在我的编译器上不起作用。我收到错误消息error:如果我尝试使用这些语句,可能无法初始化可变大小的对象“array” 我的课本上说,所有数组在声明时都初始化为零,但我在编译器上测试了这一点,结果不是这样;我必须使用for循环将其强制为零。有没有正确的方法 哦,顺便说一下,我有一台mac电脑,使用g++进行编译。当我执行mang++时,它表示它是指向llvmg
intarray[10]={}
或
int数组[10]={0}
在我的编译器上不起作用。我收到错误消息error:如果我尝试使用这些语句,可能无法初始化可变大小的对象“array”
我的课本上说,所有数组在声明时都初始化为零,但我在编译器上测试了这一点,结果不是这样;我必须使用for循环将其强制为零。有没有正确的方法
哦,顺便说一下,我有一台mac电脑,使用g++进行编译。当我执行mang++
时,它表示它是指向llvmgcc编译器的符号链接
#include<iostream>
const int NROWS = 4, NCOLS = 5;
int matrix[][NCOLS] = { 16, 22, 99, 4, 18,
-258, 4, 101, 5, 98,
105, 6, 15, 2, 45,
33, 88, 72, 16, 3};
int main()
{
int SIZE = 10;
int array[SIZE];
int count=0;
// Values of array before initalized
for(int i = 0; i < SIZE; i++)
{
std::cout << array[i] << " ";
}
std::cout << std::endl;
//Initialize array to zero
for(int i = 0; i < SIZE; i++)
{
array[i]=0;
std::cout << array[i] << " ";
}
std::cout << std::endl;
// Extract negative numbers and assign to array
for(int i = 0; i < NROWS; i++)
{
for(int j = 0; j < NCOLS; j++)
{
printf("matrix[%i,%i]=%5i\n",i,j,matrix[i][j]);
if(matrix[i][j] < 0)
{
array[count] = matrix[i][j];
printf("\tarray[%d]= %4d",count, matrix[i][j]);
printf("\tcount=%d\n", count);
count++;
}
}
}
// Values of array
for(int i = 0; i < SIZE; i++)
{
std::cout << array[i] << " ";
}
std::cout << std::endl;
return 0;
}
#包括
常数int NROWS=4,NCOLS=5;
int矩阵[][NCOLS]={16,22,99,4,18,
-258, 4, 101, 5, 98,
105, 6, 15, 2, 45,
33, 88, 72, 16, 3};
int main()
{
int SIZE=10;
int数组[大小];
整数计数=0;
//初始化前数组的值
对于(int i=0;i std::cout您需要做的是在顶部,您有:
int数组[大小]
替换为:
int array[SIZE] = {};
如果您试图这样做:
array[SIZE] = {};
后来,它就不起作用了。
在这种情况下,它将失败(当只有[0]-[9]时访问[10])
也可以使用静态数组
见:
或者,如果要使用STL数组类型,可以查看:
您甚至可能需要将大小变为常量。我在这里进行猜测
int array[10] = {0};
是完全合法的,应该适用于任何编译器,但我想你已经尝试过了
int SIZE = 10;
int array[SIZE] = {0};
这是完全不同的,而且不合法。数组边界必须是常量,而不是变量
一些编译器接受变量边界,但这并不使其合法。将int SIZE=10;
更改为const int SIZE=10;
或enum{SIZE=10};
,基于{}
的初始化应该可以工作
您无意中使用了允许可变大小数组的gcc扩展。如果数组大小取决于变量,则必须:循环或
int数组[x]
memset(数组,0,x)
如果阵列大小是硬编码的,则可以:
int数组[10]={0}
这应该可以工作,并将初始化剩余的9个元素
int数组[10]={0};
请参阅:它必须是数组吗?“我的教科书上说,所有数组在声明时都初始化为零”,那么就扔掉那本教科书。教科书还应该告诉您int SIZE=10;int array[SIZE]你不能总是依赖编译器来告诉你合法和非法C++的区别,你需要一本好的文本书。你去哪里了解编译器的细微差别,看看变量或数组的声明或初始化是否设置为零?我明白了。我必须做代码> const int大小=10;< /C++ >。这就是我收到错误消息的原因。必须将大小声明为常量才能正常工作。感谢各位,我似乎忘记了将大小声明为常量。必须执行const int SIZE
才能正常工作!!