2013-10-24 50 views
-1

我在C以下數組:如何將數組作爲參數傳遞給C中的函數?

int format[6][6] = { {1,1,1,1,1,1}, 
        {2,2,2,2,2,2}, 
        {3,3,3,3,3,3}, 
        {4,4,4,4,4,4}, 
        {5,5,5,5,5,5}, 
        {6,6,6,6,6,6} 
} 

然後我有一個功能需要通過陣列format的功能,並且所有的數據複製到一個新的數組:

​​

所以參數constructNewArray函數,是否爲int array[6][6]作爲參數?或如何糾正?

+0

我將討論任何這類現實生活中的「需要」。 – Blindy

+0

你的意思是,男人? – user2131316

+0

void ConstruNewArray(int ** array)''可能是你在找什麼? – Vorsprung

回答

0

試試這個:

void constructNewArray(int array[][6]) 
{ 
    ... 
} 
0

你用來打發陣列的方法爲constructNewArray是正確的。當傳遞一個普通的多維數組時,假設我們說data[a][b]...[x],你應該指定除第一個之外的所有維。例如,你可以聲明constructNewArray這樣的:

void constructNewArray(int array[][6]) 

的另一種方式可以是使用一個指針傳遞數組的函數。

void constructNewArray(int **array) 

,您仍然可以訪問使用索引的元素,如array[1][2]constructNewArray用這種方法。

+0

好的,但如果我使用void constructNewArray(int array [] [6]),memcpy(newArray,array,sizeof(int)* 6 * 6)是否正確。喜歡這個? – user2131316

+0

@ user2131316 memcpy並不關心你傳遞給它的是一個數組還是不是。它將從地址'array'複製'sizeof(int)* 6 * 6'字節的數據並將其複製到'newArray'。它是你想要做的,取決於你。 – Kunal

+0

好的,那麼在這種情況下,複製數據的正確方法是什麼? – user2131316

2

正如所寫的,函數中的代碼是'OK';函數定義是OK的。正如abelenky指出的那樣,調用代碼中的數組初始值設定項中缺少分號。

編譯器基本上忽略了數組的主要維數。如果你已經有了一個C99編譯器,你可以寫:

void constructNewArray(int array[static 6][6]) 

這告訴它可以假設會有陣列中的至少6行的編譯器。我不確定什麼時候真的能提供好處,但設施在那裏。

不太清楚的是數據是否以您想要的方式複製到您的10x10陣列。你會實際上初始化,好像你寫數組結束:

int newArray[10][10] = 
    { { 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, }, 
     { 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, }, 
     { 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, }, 
     { 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, }, 
     // ... all zeroes from here onwards 
    }; 

此外,編譯器不會,如果你試圖將一個10x6或2x6的矩陣傳遞給函數的抱怨。

就目前而言,您的函數會小心地創建數組並初始化它,然後不執行任何操作。你不能返回一個(指向)本地數組。你必須爲此做動態內存分配,否則你會將新數組作爲參數傳遞給函數,在這種情況下,它將變成'從6x6數組初始化10x10數組'。或者您可以安排從constructNewArray()函數內部調用另一個函數,但對於名爲'construct'的函數來說這是不合理的。所以,目前尚不清楚你的功能設計是否正確。

+1

寫入的代碼並不完全「OK」。他在'format'數組末尾丟失了一個分號。 – abelenky

+0

對靜態使用'靜態'的+1 +1 – Bathsheba

+1

@abelenky:touché!忽略編譯器指出的瑣事,... –

1

這個定義

int format[6][6] = { {1,1,1,1,1,1}, 
        {2,2,2,2,2,2}, 
        {3,3,3,3,3,3}, 
        {4,4,4,4,4,4}, 
        {5,5,5,5,5,5}, 
        {6,6,6,6,6,6} 
} 

所有變量聲明用分號結尾。 這應該是:

int format[6][6] = { {1,1,1,1,1,1}, 
        {2,2,2,2,2,2}, 
        {3,3,3,3,3,3}, 
        {4,4,4,4,4,4}, 
        {5,5,5,5,5,5}, 
        {6,6,6,6,6,6} 
}; // <== NOTE the final semi-colon. 
相關問題