【发布时间】:2018-09-12 00:35:08
【问题描述】:
我是 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");
}
}
【问题讨论】:
-
您为什么声称该函数接收
int *值的矩阵?从函数原型和定义中删除*。 -
参见stackoverflow.com/questions/14808908/… 了解如何定义指向二维数组的指针。在您的 printMatriz 函数中,您还需要取消引用指向数组的指针(在 printf 语句中的 matriz 前面添加一个 *)。
-
函数声明中的
int *matriz[][]表示指向 int 的 指针 的二维数组。在“main”中,您将其声明为仅 int 的 2D 数组:int matriz[][]。这些是不兼容的类型。删除“*”。 -
我忘记将其声明为指针。现在我做到了,它一直显示警告,这是现在的代码pastebin.com/58txTMzQ
-
如果您有新代码,edit您的问题或提出新问题。评论不用于更新。