【问题标题】:Using pointers to access 2D array in a function在函数中使用指针访问二维数组
【发布时间】:2015-07-02 02:25:46
【问题描述】:

我目前正在编写使用深度优先搜索访问数组元素的代码。如果我遇到一个“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;
}

谁能帮我解决这个问题?

【问题讨论】:

  • 您错误地定义了函数的参数。例如,代替 char* m 函数 checkMe 应具有参数类型 char m[][4] 或 char ( *m )[4]

标签: c function pointers multidimensional-array


【解决方案1】:

您错误地定义了函数的第一个参数。例如函数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] );

【讨论】:

    【解决方案2】:

    尝试将*(*(m+r)+c) = '*' 更改为*((*m+r)+c)。因为m 是一个char 指针。你必须使用它所指向的值。

    【讨论】:

      猜你喜欢
      • 2018-09-03
      • 2013-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多