我是C的新手,我正在学习指针。所以,我想传递二维数组的指针。我设法做到了,但还是收到了以下警告:

||=== Build: Debug in matriz (compiler: GNU GCC Compiler) ===|
C:\Users\pauli\.dev\c\uvv\matriz\main.c||In function 'main':|
C:\Users\pauli\.dev\c\uvv\matriz\main.c|15|warning: passing argument 1 of
'printMatriz' from incompatible pointer type [-Wincompatible-pointer-types]|
C:\Users\pauli\.dev\c\uvv\matriz\main.c|4|note: expected 'int * (*)[2]' but
argument is of type 'int (*)[2][2]'|
C:\Users\pauli\.dev\c\uvv\matriz\main.c||In function 'printMatriz':|
C:\Users\pauli\.dev\c\uvv\matriz\main.c|23|warning: format '%i' expects argument
of type 'int', but argument 2 has type 'int *' [-Wformat=]|
||=== Build finished: 0 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
||=== Run: Debug in matriz (compiler: GNU GCC Compiler) ===|

这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define TAM 2
void printMatriz(int *matriz[TAM][TAM]);

int main()
{
    int i, j, matriz[TAM][TAM];
    for(i = 0; i < TAM; i++) {
        for(j = 0; j < TAM; j++) {
            printf("Matriz[%i][%i] = ", i, j);
            scanf("%i", &matriz[i][j]);
        }
    }
    printMatriz(&matriz);
    return 0;
}
void printMatriz(int *matriz[TAM][TAM])
{
    int i, j;
    for(i = 0; i < TAM; i++) {
        for(j = 0; j < TAM; j++) {
            printf("%i\t", matriz[j][i]);
        }
        printf("\n");
    }
}

最佳答案

第一个答案
要使它成为指针,需要将它括在括号中。
当阅读这些定义时,从最深的名字开始,然后从右到右螺旋式上升,尊重优先权。
void printMatriz(int (*matriz)[TAM][TAM])
从内到外,从名称开始:
名称matriz是指向
二维数组
整数。
使用原始代码:
void printMatriz(int *matriz[TAM][TAM])
从内到外工作:
名称matriz是
二维数组
指向
整数。
希望我的眼睛里没有太多的睡眠。
现在你已经挣扎了
第二个答案现在你已经挖了一点。
使用typedef说明符可以通过封装TyWIFF声明中的复杂性来大大简化某些定义。
typedef int matriz_t[TAM][TAM];/*typedef简化了引用代码*/
void printTypedef(matriz_t*matriz)/*(注意:现在是一个简单指针)*/
{
内景i,j;
对于(i=0;i对于(j=0;jprintf(“%i\t”,(*matriz)[j][i]);/*此处仍需要()*/
}
printf(“\n”);
}
}
int主()
{
内景i,j;
matriz_t matriztdef;/*不会比这更简单*/
对于(i=0;i对于(j=0;jprintf(“Matriz[%i][%i]=”,i,j);
扫描(“%i”、&matriztdef[i][j]);
}
}
打印类型定义(&matriztdef);
返回0;
}

07-24 20:43