Visual Studio允许:int a [3] [3] = {0};用于局部变量和非静态类变量。但是,GCC仅允许将其用于局部变量,但需要int a [3] [3] = {{0}};用于类变量初始化。 GCC是否过于严格或VS不允许?
#include <iostream>
using namespace std;
class InitArray {
public:
InitArray();
void PrintArray() const;
private:
int a[3][3] = { 0 }; // compiles in Visual Studio 2017, but not GCC
// modify to = { {0} }; to compile in GCC
InitArray::InitArray() {
PrintArray();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = 1;
}
}
}
void InitArray::PrintArray() const {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
}
int main() {
InitArray A;
A.PrintArray();
int a[3][3] = {0}; // OK in BOTH compilers
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}
答案 0 :(得分:1)
您的代码仅内部化数组中的第一个单元格,更改行
int a[3][3] = {0};
到
int a[3][3] = {1};
并查看输出,只有第一个单元格为一个,其余单元格为零。
关于编译问题,我正在使用GCC进行编译,并且都为我编译。初始化类型之间的差异在于
int a[3][3] = {1,2,3,4,5};
将进行编译,您将获得
1 2 3
4 5 0
0 0 0
但是 int b [3] [3] = {{1,2,3,4}}; 由于
而无法编译“ int [3]”的初始化程序太多 发生这种情况是因为{{}}仅初始化a [3] [3]矩阵中的第一个a [3]数组。如果要全部初始化,则需要这样调用:
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};