有人能讓我想起將C中的數組,特別是多維數組賦給單個值的語法嗎?初始化單值多維數組
我相信花括號做到這一點,雖然我收到一個編譯器錯誤,當我測試:
int ArrayName [5][5] = {1};
到數組初始化爲1
有人能讓我想起將C中的數組,特別是多維數組賦給單個值的語法嗎?初始化單值多維數組
我相信花括號做到這一點,雖然我收到一個編譯器錯誤,當我測試:
int ArrayName [5][5] = {1};
到數組初始化爲1
我不知道這是不可能的。您應該使用for
或while
循環。
如果您想用單個字節填充內存,則可以使用memset
函數。
使用int ArrayName [5] [5] = {1};'是合法的,[但它不會做你期望的事情](http://stackoverflow.com/q/201101/365102)。 – 2011-04-11 02:47:58
多維數組可以使用 指針與malloc動態構建。在下面的例子中,聲明瞭一個指針指向int的指針 。在聲明後,指針 沒有意義。到mallac然後調用請求 指針指向的NX有效存儲器單元的嵌段:
x = (int **) malloc(nx * sizeof(int *));
這個調用後,X現在具有有效值;具體地說,包含nx 指針到int的存儲器塊的起始地址是 。正如我們多次看到的,指向int的每個指針只是一個常規的指針 。他們還有待 初始化爲任何有意義的,並且可以分別訪問 爲任何
x[0], x[1] ... x[nx-1], OR *x, *(x+1), *(x+2),
... *(x+nx-1).
爲了讓eachof這些指針有意義的值, 我們可以調用malloc爲他們每個人,如被完成通過 這個循環:
for (i=0;i<nx;++i){
x[i] = (int *) malloc(ny * sizeof(int));
}
請注意,我們也可以說:
for (i=0;i<nx;++i){
*(x+i) = (int *) malloc(ny * sizeof(int));
}
現在我們的指針數組中的每個指針都指向一個有意義的內存塊(每個大小爲ny個int),我們可以指定 值。要了解如何分配值,請考慮下面的 示意圖。你需要仔細研究,直到 這很清楚發生了什麼。這可能有點棘手,但一旦你掌握了它,它就不會那麼糟糕。
x[0] ---> | *x[0] | *x[0]+1 | *x[0] + 2 | ... | *x[0]+ny-1 |
x[1] ---> | *x[1] | *x[1]+1 | *x[1] + 2 | ... | *x[1]+ny-1 |
.
.
.
x[nx-1] ---> | *x[nx-1] | *x[nx-1]+1 | *x[nx-1] + 2 | ... | *x[nx-1]+ny-1 |
這相當於:
x[0] ---> | *(*(x+0)+0) | *(*(x+0)+1) | *(*(x+0)+2) | ... | *(*(x+0)+ny-1) |
x[1] ---> | *(*(x+1)+0) | *(*(x+1)+1) | *(*(x+1)+2) | ... | *(*(x+1)+ny-1) |
.
.
.
x[nx-1] ---> | *(*(x+nx-1)+0) | *(*(x+nx-1)+1) | *(*(x+nx-1)+2) | ... | *(*(x+nx-1)+ny-1) |
這相當於:
x[0] ---> | x[0][0] | x[0][1] | x[0][2] | ... | x[0][ny-1] |
x[1] ---> | x[1][0] | x[1][1] | x[1][2] | ... | x[1][ny-1] |
.
.
.
x[nx-1] ---> | x[nx-1][0] | x[nx-1][1] | x[nx-1][2] | ... | x[nx-1][ny-1] |
...給出的這些重要關係:
*(*(x + i) + j) = *(x[i] + j) = x[i][j]
我無法看到答案和問題之間的聯繫.... – AnT 2011-04-11 04:48:44
你可以這樣做:
int ArrayName[5][5];
for(size_t i = 0; i < 5; i++)
for(size_t i2 = 0; i2 < 5; i2++)
ArrayName[i][i2] = 1;
或者更高效:
int ArrayName[5][5];
for(size_t i = 0, *ptr = ArrayName; i < (5*5); ++i, ++ptr)
*ptr = 1;
如果你足夠瘋狂,你會創建一個功能它:
void init_arr(void* ptr, void* value, size_t size)
{
for(size_t i = 0; i < size; ++i, ++ptr)
*ptr = *value;
}
int ArrayName[5][5];
int val = 1;
init_arr(ArrayName, val, 5 * 5);
如果你w用C++ ERE,您可以使用模板:
template <class T>
void init_arr(T *ptr, T value, size_t size)
{
for(size_t i = 0; i < size; ++i, ++ptr)
*ptr = value;
}
int ArrayName[5][5];
init_arr(ArrayName, 1, 5 * 5);
如果你真的被使用C++,你會用向量......哎呀,有可能是一個花哨的升壓方式做到這一點。 :)
C語言中沒有簡潔的語法,它可以將數組的所有元素初始化爲單個值,而不管該數組是多維還是單維。有語法可以將所有元素都設置爲零(並且它是= { 0 }
),但對於任何其他值都是不可能的。
當然,你可以拼出所有數組元素的單個初始值設定項,但這可能不是你要找的。
您所能做的就是手動將所有元素設置爲特定值,方法是使用賦值。
你會得到什麼錯誤? – SLaks 2011-04-11 02:38:51
[擴大閱讀。](http://stackoverflow.com/q/201101/365102) – 2011-04-11 02:43:45
隨着花括號花括號,你應該爲數組的每個成員提供一個單獨的值(缺失值設置爲0)。因爲它很容易理解,所以我會選擇Elalfer的答案。另一方面,如果你有C++可用,向量可以初始化爲同一個值的多個副本(儘管這可能會與多維度混亂)。另一方面請注意:如果您在堆上分配內存,則可以使用calloc而不是malloc來將內存初始化爲0. – 2011-04-11 02:56:21