1

大家好,自从我接触 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;
}
4

2 回答 2

3

你在这里遇到了一些问题:

typedef int (**intptr) (); 
intptr makeMatrix(int n); 

...

int **A = makeMatrix(n);

intptrtypedef 声明了一个指向函数的指针,该函数接受不确定数量的参数并返回一个int. A不是一个int

你需要写:

int **makeMatrix(int n);


int **A = makeMatrix(n);

在这里使用 atypedef没有多大帮助。

typedef int **(*intptr)();

这声明了一个指向函数的指针,该函数返回指向指向int. 但是写作

intptr makeMatrix(int n);

将声明makeMatrix()返回指向函数的指针,而不是int **.

于 2012-04-10T04:06:03.650 回答
0

您的 typedef 有一个额外的(),使其成为零参数函数类型。删除它,你应该很好。

于 2012-04-10T04:05:21.193 回答