2012-04-10 80 views
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; 
} 
+1

'()'在'intptr'' typedef'中做什么? – 2012-04-10 04:01:54

+0

[堆栈溢出不是语法检查器](http://meta.stackexchange.com/a/128596/172496) – 2012-04-10 04:05:23

+2

幸运的是,这在语法上很好。 – 2012-04-10 04:06:36

回答

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 **

0

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

相关问题