2012-10-04 30 views
0

如果我創建一個Char matrix as param

char a [100] [100];

併發送到函數void func(char ** a); 它說char()[100]不能轉換爲char *

我想像一個char [100] [100]就像一個指向指針的指針。 我錯了嗎?

謝謝

+0

它衰減爲一個指向100個字符數組的指針。 – chris

+0

我應該如何聲明函數? – Lefsler

回答

2

是的,你錯了。一個char[100][100]是一個數組(100 char),當它傳遞給一個函數時,它被轉換爲一個指針(數組100 char),一個char (*)[100]。當作爲函數參數傳遞時,將數組轉換爲指針只會影響數組的最外層。

你既可以聲明該函數作爲採取這一類型的參數,

void func(char (*)[100]); 

,如果你將永遠傳遞數組有100列,否則你將不得不通過不同的參數,如果你想保持函數的類型。

+0

我應該如何聲明這個函數? – Lefsler

+0

現在添加了Prototype,但是如果您想傳遞不同維數的數組(行號不重要,但列號會計數),則需要以不同的方式進行。你的用例是什麼? –

+0

非常感謝幫助ppl – Lefsler

2

你可以保持它的簡單,並宣佈它是這樣的:

void func(char a[100][100]); 

如果您的系統支持變長數組,你可以這樣做:

void func(int nRows, int nCols, char a[nRows][nCols]); 

第二個方法可以讓你將任意大小的二維數組傳遞給該函數。