用指针查找二维数组最大值及位置

img

各位看看,为什么if后面的前两个赋值语句不受控制,刚刚接触c语言,不太熟悉望解答

回答:顶级折磨呀,大哥,咱就是说,能不能把这个代码格式统一一下,咱换行就按换行的风格来,不换行就按不换行的风格来,不能这个不方便阅读的写法呀。这边参考一个C++的规范:https://zhuanlan.zhihu.com/p/71782780

用指针查找二维数组的最大值,较为规范的代码如下:

#include <stdio.h>

int main(){
    int a[3][4];
    int i, j, m, n;
    int *p = &a[0][0];
    
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            scanf("%d", &a[i][j]);
        }
    }
    
    // 说明:二维数组的指针走向是每次先走一维数组的长度,实际上的二维数组是很长的一维数组组成的,
    // 当然在内存中,会按照内存连续分布,方便编译器计算下标 
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            if(*p < *(p+i*4+j)){
                m = i;
                n = j;
                *p = *(p+i*4+j);
                printf("%d %d %d\n", i, j, *p);
            }
        }
    }
    
    printf("%d %d %d", m, n, *p);
}

/*
测试数据 
1 2 3 4
5 6 7 8
9 10 11 12
*/

运行截图:

img