我的程序正常运行,但收到​​警告

时间:2019-01-23 23:29:33

标签: c function-pointers

我已经为双指针分配了内存,并为它填充了一些值。 (1)之后,我创建了一个将ints填充为0的函数。然后,我创建了一个指向该函数的指针,并创建了另一个使用该指针作为参数的函数。

我运行了程序,它正在运行,但是问题是我收到警告:

  

传递'cheama_transforma0'的参数1使指针从整数开始而无需强制转换

这是我的代码:

#include <stdio.h>
#include <stdlib.h>


void printeaza_pointer(int **cacat){
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            printf("%d\n",cacat[i][j]);
        }
        putchar('\n');
    }
}
int transforma_in0(int **cacat){
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            cacat[i][j] = 0;
        }
    }
    return 0;
}
void cheama_transforma0(int (*p)(int **pointer)){

}
int main()
{
    int (*p)(int **cacat);
    int **pointer_d = (int **)malloc(sizeof(int*)*3);
    for(int i = 0; i < 3; i++){
        pointer_d[i] = (int *)malloc(sizeof(int)*3);
    }

    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            pointer_d[i][j] = 1;
        }
    }
    p = transforma_in0;
    printeaza_pointer(pointer_d);
    cheama_transforma0(p(pointer_d));
    printeaza_pointer(pointer_d);

    return 0;
}

1 个答案:

答案 0 :(得分:2)

  

“传递'cheama_transforma0'的参数1使指针从整数开始而没有强制转换”

void cheama_transforma0(int (*p)(int **pointer));
int **pointer_d;
int (*p)(int **cacat);
cheama_transforma0(p(pointer_d));

p是指向返回int的函数的函数指针。如果将p函数的返回值作为cheama_transforma0函数的第一个参数传递,则编译器会将int函数返回的p值转换为{{ 1}}函数指针类型。因此,警告。