回答
memset(a, 0, 100 * 200 * sizeof(int));
應該這樣做。
嘗試memset(a,0,sizeof(a));
這簡單地將覆蓋使用由陣列與0字節的存儲器。除非你真的知道你做什麼,否則不要爲用戶定義的數據類型執行此操作。還有std::fill
和std::fill_n
,這是更多的C++ ISH(但不是這裏最簡單的方法)。
即使對於非用戶定義的數據類型,這可能會產生意想不到的結果。數據成員指針是一個在GCC和Clang(「Itanium ABI」)使用的C++-ABI中使用非0×0空指針編碼的示例 - 它們使用全1位。對於「int」,這應該沒問題。 – 2010-08-27 20:55:04
不應該在這裏使用'sizeof(a)* sizeof(int)'嗎? – Mikhail 2012-12-02 22:45:43
不,數組sizeof以字節返回正確的大小,因此不需要乘以int大小。 – 2012-12-03 02:18:23
如果這個數組是在文件範圍聲明的,或者在函數範圍內聲明爲'static',那麼它會自動初始化爲零,你不必做任何事情。這隻適用於一個在程序啓動時的初始化;如果你需要重置它,你必須自己編碼。我會使用memset
。
如果它在不帶靜電的功能範圍內聲明的,你需要使用memset
,或顯式的初始化 - 單= { 0 }
是不夠的,你不需要寫出所有200個零喜歡別人建議。
還應該補充說明靜態變量與非靜態聲明的變量的語義是非常不同的。聲明爲靜態的變量固有地聲明一個狀態;這可能不是OP想要的。我同意memset方法(或明確的初始化方法)。 – Schedler 2010-08-27 18:04:33
嘗試
int a[100][200] = {{0}};
如果初始化一些(但不是全部)的元素,其餘的將被初始化爲零。在這裏,你只是明確地初始化第一個子數組的第一個元素,編譯器正在處理其餘的部分。
+1'= {0}'也應該有效,但這可能會更好地避免編譯器警告。 – Potatoswatter 2010-08-27 20:30:25
爲了縮短它,C++允許'= {};'。 – 2010-08-27 20:45:12
「我無法在聲明點初始化」是什麼意思? 「不知道如何」?或者「不能修改那裏的代碼」?
C++語言的特徵在於在聲明點
int a[100][100] = {};
初始化整個陣列爲0(注意,沒有明確0
是{}
之間確實需要)。你可以使用它嗎?
如果不能,那麼你的選擇是:使用memset
-hack,1D-重新解釋,黑客或通過數組(S)迭代(有或沒有幫助FO std::fill
)設置的每個元素明確。
聲明時的初始化是被禁止的,例如,當goto或switch切換到聲明中時,就會將其轉換爲變量的作用域。 – Potatoswatter 2017-02-06 02:05:43
提到的memset
方法(memset(a,0,sizeof(a));
)會起作用,但是如何使用C++方式(根據您的標記)以及使用向量?
std::vector<std::vector<int> > a;
a.assign(100, std::vector<int>(200));
C++允許多維數組完全通過基元素指針進行迭代。所以,你可以使用std::fill
,並將它傳遞的第一個非數組元素
std::fill(a[0] + 0, a[99] + 100, 0);
在C,這是正式不允許的,你需要通過每個單獨子陣列迭代,因爲迭代超越了第一子陣列的過去,在C指針導致C中未定義的行爲儘管如此,實際上這仍然有效。
這仍然是真的嗎? (是否曾經?) – Potatoswatter 2017-02-06 02:04:31
我測試了這個解決方案,它工作。
int arr[100][200];
for (int i=0; i<100; i++)
for (int j=0; j<200; j++) (arr[i][j] = 0);
for (int i=0; i<100; i++)
for (int j=0; j<200; j++) cout << (arr[i][j]);
對於C++,您可以使用算法頭中的std:fill方法。
int a[x][y];
std::fill(a[0], a[0] + x * y, 0);
所以,你的情況,你可以這樣做:
int a[100][200];
std::fill(a[0], a[0] + 100 * 200, 0);
當然,0可以爲任何int值被改變。
許多答案使用指針運算與fill
。這是可以做到簡單:
int a[N][K];
fill(a[0], a[N], 0);
基本上,a[N]
是多維數組後第一個內存地址,不管有多少尺寸也有。這工作太:
int a[N][K][L][M];
fill(**a[0], **a[N], 0);
這裏的星號解引用指針下降到int*
類型(數組括號解引用int****
到int***
,兩個星號做工作的其餘部分)。
- 1. Javascript/jQuery填充多維數組...數組與數組元素
- 2. Javascript - 組合多維數組的元素
- 3. 計數多維數組元素VB.NET
- 4. 多維數組,0鍵
- 5. MQL4 - ArrayCopy - 將一維數組複製到多維數組元素
- 6. PHP:一維數組到多維數組與元素的乘法
- 7. 初始化多維數組:{0}與{{{0}}}
- 8. 總和多維數組元素的
- 9. PHP多維數組元素被跳過
- 10. 多維數組元素的基礎
- 11. 將元素添加到多維數組
- 12. 初始化多維數組元素
- 13. 向多維數組添加元素
- 14. 添加元素多維數組
- 15. 元素多維數組的,爪哇
- 16. php echo單元素多維數組
- 17. 顯示多維數組元素
- 18. 多維數組元素驗證
- 19. 移動多維數組的元素
- 20. 合併多維數組元素在PHP
- 21. JavaScript和多維數組元素值
- 22. Ruby-訪問元素多維數組
- 23. 更改元素的多維數組php
- 24. 刪除多維數組的父元素?
- 25. 多維數組中的新元素
- 26. 多維數組,元素訪問矢量
- 27. 填充Java多維數組
- 28. PHP - 填充多維數組
- 29. Python:填充多維數組
- 30. 填充多維數組
爲什麼你不能在聲明的時候初始化它們? – 2010-08-27 17:44:50
你想在課堂上申報嗎? – cpx 2010-08-27 18:06:59