【问题标题】:My program is working correctly, but I get a warning我的程序运行正常,但我收到警告
【发布时间】:2019-01-23 23:29:32
【问题描述】:

我已经为双指针分配了内存,并用一些值填充了它。 (1) 之后,我创建了一个用 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;
}

【问题讨论】:

  • "... 并创建了另一个使用该指针作为参数的函数。" - 这不是您作为参数传递的内容。 cheama_transforma0 的形式参数是 int (*p)(int **pointer)。您正在通过p(pointer_d) 传递调用 函数指针p结果。该函数调用返回int,而不是int (*p)(int **pointer),因此编译器抱怨是正确的。
  • 这只是一件好事chaema_transforma0 根本不尝试对p 做任何事情,因为它实际上并不指向函数。

标签: c function-pointers


【解决方案1】:

“传递 '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 函数,编译器会将p 函数返回的int 值转换为int (*)(int **pointer) 函数指针类型。因此警告。

【讨论】:

  • 那么……你有什么推荐的?
  • 取决于你想做什么。 cheama_transforma0 函数应该做什么? (我建议用英文命名所有符号,以便其他人可以简单地理解你)。没有函数体,不知道函数应该做什么?
  • 假设使用指针显示函数 transforma_in0
  • manifest ?你的意思是 call ?用什么参数。我想你的意思是int cheama_transforma0(int (*func)(int **pointer), int **data){ return func(data); } 并打电话给cheama_transforma0(p, pointer_d)
  • 我想做一个调用另一个函数并修改数组的函数
猜你喜欢
  • 1970-01-01
  • 2021-10-07
  • 2015-12-03
  • 2020-10-20
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多