想請問二微陣列該如何初始化(除了用迴圈一個個變成0以外的方式),我用arr[n][m]={0}不會成功,如下
int n,m;
cin >>n>>m;
int arr[n][m]={0};
for(int i=0,j=0;i<n&&j<m;(i<n-1)?i++:(i=0,j++)){
cout<<"i="<<i<<" j="<<j<<" 陣列="<<arr[i][j]<<endl;
}
這樣輸入3 3 結果為:
3 3
i=0 j=0 陣列=0
i=1 j=0 陣列=0
i=2 j=0 陣列=4206448
i=0 j=1 陣列=0
i=1 j=1 陣列=4206456
i=2 j=1 陣列=0
i=0 j=2 陣列=4200066
i=1 j=2 陣列=0
i=2 j=2 陣列=15603472
把 int arr[n][m]={0};
改成 int arr[n][m]={{0},{0}};
結果也不會成功,如下:
3 3
i=0 j=0 陣列=0
i=1 j=0 陣列=0
i=2 j=0 陣列=4206464
i=0 j=1 陣列=0
i=1 j=1 陣列=4206472
i=2 j=1 陣列=0
i=0 j=2 陣列=4200066
i=1 j=2 陣列=0
i=2 j=2 陣列=7214864
另外網路上有寫宣告陣列不能放變數,但似乎也能順利執行,想問其原因?
想請問二微陣列該如何初始化(除了用迴圈一個個變成0以外的方式),我用arr[n][m]={0}不會成功,如下
int n,m;
cin >>n>>m;
int arr[n][m]={0};
for(int i=0,j=0;i<n&&j<m;(i<n-1)?i++:(i=0,j++)){
cout<<"i="<<i<<" j="<<j<<" 陣列="<<arr[i][j]<<endl;
}
這樣輸入3 3 結果為:
3 3
i=0 j=0 陣列=0
i=1 j=0 陣列=0
i=2 j=0 陣列=4206448
i=0 j=1 陣列=0
i=1 j=1 陣列=4206456
i=2 j=1 陣列=0
i=0 j=2 陣列=4200066
i=1 j=2 陣列=0
i=2 j=2 陣列=15603472
把 int arr[n][m]={0};
改成 int arr[n][m]={{0},{0}};
結果也不會成功,如下:
3 3
i=0 j=0 陣列=0
i=1 j=0 陣列=0
i=2 j=0 陣列=4206464
i=0 j=1 陣列=0
i=1 j=1 陣列=4206472
i=2 j=1 陣列=0
i=0 j=2 陣列=4200066
i=1 j=2 陣列=0
i=2 j=2 陣列=7214864
另外網路上有寫宣告陣列不能放變數,但似乎也能順利執行,想問其原因?
1.arr[n][m]={0}這種寫法只適用於長度是常數的情況。可以用memset(c與c++皆可使用)或是fill(只有c++)。例如
memset(arr, 0, sizeof(arr));
或是
fill(arr[0], arr[0] + a * b, 0);
https://www.cplusplus.com/reference/cstring/memset/
https://www.cplusplus.com/reference/algorithm/fill/
2. 這叫作VLA (variable-length array),不是標準的c++不代表一定會編譯失敗,這是gcc的extension(不過在c語言中是可以的)。
可參考 https://stackoverflow.com/questions/39334435/variable-length-array-vla-in-c-compilers
如果你跟我一樣不喜歡用非標準的方式,可以改用vector,我覺得很方便
想請問二微陣列該如何初始化(除了用迴圈一個個變成0以外的方式),我用arr[n][m]={0}不會成功,如下
int n,m;
cin >>n>>m;
int arr[n][m]={0};
for(int i=0,j=0;i<n&&j<m;(i<n-1)?i++:(i=0,j++)){
cout<<"i="<<i<<" j="<<j<<" 陣列="<<arr[i][j]<<endl;
}
這樣輸入3 3 結果為:
3 3
i=0 j=0 陣列=0
i=1 j=0 陣列=0
i=2 j=0 陣列=4206448
i=0 j=1 陣列=0
i=1 j=1 陣列=4206456
i=2 j=1 陣列=0
i=0 j=2 陣列=4200066
i=1 j=2 陣列=0
i=2 j=2 陣列=15603472
把 int arr[n][m]={0};
改成 int arr[n][m]={{0},{0}};
結果也不會成功,如下:
3 3
i=0 j=0 陣列=0
i=1 j=0 陣列=0
i=2 j=0 陣列=4206464
i=0 j=1 陣列=0
i=1 j=1 陣列=4206472
i=2 j=1 陣列=0
i=0 j=2 陣列=4200066
i=1 j=2 陣列=0
i=2 j=2 陣列=7214864
另外網路上有寫宣告陣列不能放變數,但似乎也能順利執行,想問其原因?
1.arr[n][m]={0}這種寫法只適用於長度是常數的情況。可以用memset(c與c++皆可使用)或是fill(只有c++)。例如memset(arr, 0, sizeof(arr));或是
fill(arr[0], arr[0] + a * b, 0);
https://www.cplusplus.com/reference/cstring/memset/
https://www.cplusplus.com/reference/algorithm/fill/
2. 這叫作VLA (variable-length array),不是標準的c++不代表一定會編譯失敗,這是gcc的extension(不過在c語言中是可以的)。可參考 https://stackoverflow.com/questions/39334435/variable-length-array-vla-in-c-compilers
如果你跟我一樣不喜歡用非標準的方式,可以改用vector,我覺得很方便
把0去掉,改成 int ar[100][100]={}; 就可以惹