2013-10-22 37 views
3

我想知道如果,給出下面的聲明:C:二維陣列和正常陣列相同的大小之間的差異

int first[1][COLUMN_NUMBER]; 
int second[COLUMN_NUMBER]; 

兩個兩維陣列可以在相同或在被訪問類似的方式。我的意思是:它們是可交換的嗎?我問這是因爲,由於升級,我想避免重構我之前編寫的所有代碼。

非常感謝。

+0

@ user1770426;提供的鏈接如何與這個問題相關? – haccks

回答

1

2D陣列和相同的尺寸的一維數組是不相同/相似儘管2D陣列可被表示爲一個1D array(嚴格地說behavior is undefined)。

我的意思是:它們是可以交換的嗎?

這可能取決於具體情況。
一個簡單的區別,你可以通過調用函數

void foo(int *p) 
{ 

} 

的兩個病例看到的。該first可以通過傳遞&first[i][j]*firstfirst[i](其中ijint類型和表示數組內結合的行和列指數),而陣列second可以作爲second&second[i]傳遞被傳遞到foo任一。
您不能通過first(不像second)和second[i](不像first[i])到foo作爲參數,因爲它們是與foo期望的參數(這是int *)不兼容。

3

根據this piece of code,應該沒有區別。

#include <stdio.h> 

int main(void) { 
    int const COLUMN_NUMBER = 10; 
    union { 
     int first[1][COLUMN_NUMBER]; 
     int second[COLUMN_NUMBER]; 
     } u; 
    u.first[0][5] = 3; 
    printf("%d\n", u.second[5]); 
    return 0; 
} 
0
int first[1][10]; 
int second[10]; 

對於這個例子,這兩個語句在內存分配方面沒有區別。第一條語句聲明瞭一個具有1行和10列的數組。同樣,第二條語句構成一個僅包含10個元素的數組。從邏輯上講,兩條語句有所不同,但這裏都佔用相同的內存空間。 在第一條語句的情況下,如果我們先int [10] [10],那麼它將聲明一個10行和10列的數組。