为什么指针没有指向正确的地址?

问题描述 投票:0回答:1

指针没有指向矩阵中的正确位置。我想问一下为什么。 以下是我一直在研究的问题的描述,来自 JudgeGirl。

描述 编写一个程序来计算从矩阵左下角到右上角的路径数。矩阵有 r 行和c 列。您只能将一个单元格移动到另一个单元格,并且只能移动到右侧或顶部。矩阵中也有障碍物,你不能进入任何有障碍物的单元格。请计算一下你可以走多少条路。请注意,强烈建议您用“递归”的方式思考来解决这个问题。

限制 两者都 和c 不超过12个 .

输入格式 有r+1个 输入中的行。第一行有 r 和c 下一个r 行具有矩阵的状态。 1 表示可以通过的单元格,0 表示障碍物。左下角和右上角都是1。

这是我的代码,结果发现指针没有指向正确的地址:

#include <stdio.h>
#include <assert.h>

void count(int x, int y, int r, int c, int *ptr, int *ways){
    if((*ptr==0)||(x>(c-1))||(y<0)){
        return;
    }else{
        //printf("(%d, %d) %d", x, y, *matrix);
    }

    if((x==(c-1))||(y==0)){
        *ways += 1;
        return;
    }
    
    count(x+1, y, r, c, &(*(ptr+1)), &(*ways));
    count(x, y-1, r, c, &(*(ptr-c)), &(*ways));
    
    return;

}

int main(){

    int r, c; //y:r x:c
    scanf("%d %d", &r, &c);
    assert((r<=12)&&(c<=12));
    int matrix[c][r];
    
    for(int j=0; j<r; j++){
        for(int i=0; i<c; i++){
            scanf("%d", &matrix[i][j]);
            //printf("%d ", matrix[i][j]);
        }
        //printf("\n");
    }
    
    int ways = 0;
    count(0, r-1, r, c, &matrix[0][r-1], &ways); //from(0,r-1) to (c-1,0)
    
    printf("%d", ways);
    
    return 0;

}
arrays c pointers recursion
1个回答
0
投票

在 C 中,二维数组不是存储为二维连续数组(请参阅 https://i.stack.imgur.com/70Ezz.jpgC 多维数组是否连续无孔?),因此使用指针算术将无法按您的预期工作。相反,您可以使用“i-j”将二维数组作为普通数组[i][j]访问。 在基础中最好检查matrix[i][j] == 0。 希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.