2015-04-23 88 views
1

我目前正在研究使用深度優先搜索訪問數組元素的代碼。如果我遇到'Y',我用'*'替換它並增加我的計數。不過,雖然使用指針,我遇到了以下錯誤:使用指針訪問函數中的二維數組

In function 'dfs': 
5:5: error: invalid type argument of unary '*' (have 'int') 


In function 'checkMe': 
23:16: error: invalid type argument of unary '*' (have 'int') 

這裏是我的代碼:

#include <stdio.h> 

void dfs(char* m,int r,int c,int v1,int v2) 
{ 
    *(*(m+r)+c) = '*'; 
    for(int k=0;k<2;k++) 
    { 
     if((r<(v1-1))&&(c<(v2-1))) 
     { 
      dfs(m,r,c,v1,v2); 
     } 
    } 
} 

int checkMe(char* m,int row,int col) 
{ 
    int counter = 0,i=0,j=0; 

    for(i=0;i<row;i++) 
    { 
     for(j=0;j<col;j++) 
     { 
      if(*(*(m+i)+j) == 'Y') 
      { 
       dfs(m,i,j,row,col); 
       counter++; 
      } 
     } 
    } 

    return counter; 
} 

int main() 
{ 
    int i = 0,count = 0,p = 4,q = 4; 
    char input[4][4]={{'Y','Y','Y','N'},{'N','N','N','Y'},{'Y','Y','N','Y'},{'Y','N','N','N'}}; 

    count = checkMe(input,p,q); 
    printf("%d",count); 

    return 0; 
} 

誰能幫助我?

+4

你錯誤地定義了函數的參數。例如,而不是char * m funsction checkMe應該有參數類型char m [] [4]或char(* m)[4] –

回答

0

您錯誤地定義了函數的第一個參數。例如函數checkMe必須像

int checkMe(char m[][4], int row, int col) 
{ 
    int counter = 0,i=0,j=0; 

    for(i=0;i<row;i++) 
    { 
     for(j=0;j<col;j++) 
     { 
      if(*(*(m+i)+j) == 'Y') 
      { 
       dfs(m,i,j,row,col); 
       counter++; 
      } 
     } 
    } 

    return counter; 
} 

第一參數的等效聲明來定義也是以下

char (*m)[4] 

實際上就足夠了僅具有兩個參數,因爲列數是已知的。或者如果你的編譯器支持可變長度數組,那麼你可以聲明如

int checkMe(int row, int col, char m[][col]); 
0

嘗試將*(*(m+r)+c) = '*'更改爲*((*m+r)+c)。由於m是一個char指針。你必須使用它指向的值。

+0

我試過了。我仍然遇到同樣的錯誤。 –