关于#代码块#的问题,如何解决?(语言-c语言)

问题遇到的现象和发生背景

编译错误

img

用代码块功能插入代码,请勿粘贴截图
#include
#define N 5
int main()
{
    //int N = 0;
    //scanf("%d", &N);
    int arr[N][N] = { 0 };
    //输入
    for (size_t i = 0; i < N; i++)
    {
        for (size_t j = 0; j < N; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    //交换
    
    //中心元素

    int i, j, tmpe, *max, *min;
    int *b[N*N], *p = &arr[0][0];
    for (i = 0; i < N*N; i++)
        b[i] = p++;    //指向原二维数组各元素的指针数组 
    /*--中心元素--*/
    for (i = 1, max = b[0]; i < N*N; i++) {
        if (*max < *b[i])
            max = b[i];
    }
    //将元素值交换 
    tmpe = *b[(N*N-1)/2];
    *b[(N*N-1)/2] = *max;
    *max = tmpe;
    //左上
    for (i = 1, min = b[0]; i < N*N; i++) {
        if (*min > *b[i])
            min = b[i];
    }
    //元素值交换 
    tmpe = *b[0];
    *b[0] = *min;
    *min = tmpe;
    //右上
    for ( i = 1,min=b[N-2]; i < N*N; i++)
    {
        if (*min>*b[i])
        {
            min = b[i];
        }
    }
    tmpe = *b[N-1];
    *b[N-1] = *min;
    *min = tmpe;
    //左下
    for ( i = 1,min=b[1]; i < N-1; i++)//第一行2--4
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    for ( i = N; i < N*N; i++)//第二行往下
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    tmpe = *b[N*N-N];
    *b[N*N-N] = *min;
    *min = tmpe;
    //右下
    for (i = 1, min = b[1]; i < N-1; i++)//第一行2--4
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    for (i = N; i < N*N-N; i++)//第二行--第四行
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    for ( i = N*N-N+1; i < N*N; i++)
    {
        if (*min > *b[i])
        {
            min = b[i];
        }
    }
    tmpe = *b[N*N-1];
    *b[N*N-1] = *min;
    *min = tmpe;
    //输出
    
    for ( i = 0; i < N; i++)
    {
        for ( j = 0; j < N; j++)
        {
            printf("%-d", arr[i][j]);
            if (j-1)
            {
                printf(" ");
            }
        }
        printf("\n");
    }
    return 0;
}

运行结果及报错内容

编译错误

我想要达到的结果

想手动输入N,不用宏定义

仅供参考:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=(int **)malloc(rows*sizeof(int *));
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=(int *)malloc(cols*sizeof(int));
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        free(p[i]);
    }
    free(p);
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//


再供参考:

#include <stdio.h>
#include <stdlib.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=new int *[rows];
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=new int[cols];
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        delete[] p[i];
    }
    delete[] p;
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//