我目前正致力于使用Depth-First Search访问数组元素的代码。如果我遇到'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;
}
任何人都可以帮我吗?
答案 0 :(得分:0)
尝试将*(*(m+r)+c) = '*'
更改为*((*m+r)+c)
。由于m
是char
指针。你必须使用它指向的值。
答案 1 :(得分:0)
您错误地定义了函数的第一个参数。例如,函数angular.module('ma.directives')
.directive('maDropdownPanel', function() {
var directiveId = null;
return {
restrict: "E",
transclude: true,
templateUrl: "maDropdownPanel.html",
scope: {},
link: function(scope, element, attributes) {
$('body').on('click.panelClick' + attributes.slug, scope.handleClickAway);
// Get an ID unique to this particular directive.
directiveId = "ma-dropdown-panel" + scope.$id;
},
controller: function($scope) {
$scope.handleClickAway = function(event) {
// The following shows which directive took it. Out of two, it's always the second (ie. the last to register the event).
console.log(directiveId);
}
}
}
});
必须定义为
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]