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

标签 c function-pointers

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

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

passing argument 1 of 'cheama_transforma0' makes pointer from integer without a cast

这是我的代码:

#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;
}

最佳答案

"passing argument 1 of 'cheama_transforma0' makes pointer from integer without a cast"

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 返回的值函数到int (*)(int **pointer)函数指针类型。因此发出警告。

关于c - 我的程序运行正常,但收到警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54337280/

相关文章:

ios - 简单的 posix 服务器无法从循环中设置 UILabel

c - open() 和 read() 系统调用...程序未执行

c - 指向函数指针的指针

在结构中使用函数指针数组时崩溃

c# - 从 C++ 库中的函数返回数组到 C# 程序

带指针的C程序

c - C 中不一致的求和

c++ - 哪种协议(protocol)用于通过 LAN 开发聊天应用程序?

c - c中回调寄存器函数中userdata有什么用?

c++ - 使用指向类方法的指针作为函数的参数,但作为函数指针,而不是指向方法的指针