2016-11-10 60 views
-1

請幫我用簡單的程序嗎?我是begginer,我的英語不好,很難理解。 :/在我的簡易程序中,「數值既不是數組也不是指針也不是矢量」

方案:

void tisk_pole (P); 

int main() 
{ 
    char P1[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}}; 
    tisk_pole(P1); 
    return 0; 
} 

void tisk_pole (P){ 
    int i, j; 

    for (i = 0; i < 3; i++){ 
     for (j = 0; j < 3; j++) 
      printf("%c", P[i][j]); //HERE IS PROBLEM -> value is neither array nor pointer nor vector 
     putchar('\n'); 
    } 
} 

,能不能請你幫我解決這個問題?非常感謝你。

+1

do'void tisk_pole(char P [3] [3]){'改爲。 –

回答

1

tisk_pole函數定義中的參數P的類型必須與函數調用中參數P1的類型匹配。

P1具有類型char [3][3] - 即,char的3元素陣列的3元素陣列。因此,在tisk_poleP參數的聲明必須是下列之一:

void tisk_pole(char P[3][3]) 

void tisk_pole(char P[][3]) 

void tisk_pole(char (*P)[3]) 

除了當它是sizeof或的操作數一元運算符&,或者是用於在聲明中初始化字符數組的字符串字面量,類型的表達式「T的N元素數組」將被轉換(「衰減」)爲「指向T的指針」類型的表達式,並且表達式的值將是該數組的第一個元素的地址。

在函數調用

tisk_pole(P1); 

表達P1已鍵入 「3元素數組3-元件的陣列的char」(char [3][3]);因爲它不是sizeof或一元運算符&的操作數,所以它被轉換成「指向3元素數組的指針」(char (*)[3])的表達式並且計算爲P1的第一個元素的地址。這意味着tisk_pole收到一個指針值,而不是一個數組值。

函數參數聲明T a[N]T a[],並T *a都意味着同樣的事情 - 他們都宣稱a作爲指針T,而不是T數組。不過,這是只有在函數參數聲明中爲true。

您可以使用指針上的[]下標操作符與您在數組上操作的方式相同,因此P[i][j]的工作方式與您期望的完全相同。

相關問題