大家好,我已经有一段时间了,因为我碰到了C所以我真的生气了。我写了一个小程序,用两个动态数组创建一个矩阵。但是,我收到了这个警告,我不明白为什么?我想我不太确定指针的指针。有人可以帮我指出我的问题在哪里吗?感谢。
sm.c: In function ‘main’:
sm.c:11:13: warning: initialisation from incompatible pointer type [enabled by default]
sm.c: In function ‘makeMatrix’:
sm.c:27:3: warning: return from incompatible pointer type [enabled by default]
#include <stdio.h>
#include <stdlib.h>
typedef int (**intptr) ();
intptr makeMatrix(int n);
int main(int argc, char *argv[]) {
int n = 2;
int **A = makeMatrix(n);
if(A) {
printf("A\n");
}
else printf("ERROR");
}
intptr makeMatrix(int size) {
int **a = malloc(sizeof *a * size);
if (a)
{
for (int i = 0; i < size; i++)
{
a[i] = malloc(sizeof *a[i] * size);
}
}
return a;
}
答案 0 :(得分:3)
你在这里遇到了一些问题:
typedef int (**intptr) ();
intptr makeMatrix(int n);
...
int **A = makeMatrix(n);
intptr
typedef声明一个指向函数的指针,该函数接受一个不确定数量的参数并返回int
。 A
不是int
。
你需要写:
int **makeMatrix(int n);
int **A = makeMatrix(n);
使用typedef
对此无济于事。
typedef int **(*intptr)();
声明一个指向函数的指针,该函数返回指向int
指针的指针。但是写作
intptr makeMatrix(int n);
会声明makeMatrix()
返回指向函数的指针,而不是int **
。
答案 1 :(得分:0)
你的typedef有一个额外的()
,使它成为零参数函数类型。删除它,你应该是好的。