【问题标题】:warning: passing argument 1 of makes integer from pointer without a cast [enabled by default] [closed]警告:从没有强制转换的指针传递参数 1 的整数 [默认启用] [关闭]
【发布时间】:2014-02-19 11:21:24
【问题描述】:

我有这个功能:

VOID myFunc(INT start, INT end)
{
  //statements
}

我这样称呼:

myFunc (Arr[new_1].Msg,Arr[new_2].Msg);

这会产生错误: 警告:从指针传递参数 1 而不进行强制转换 [默认启用]

Arr 是一个结构体数组,全局定义为:

MY_STRUCT Arr[100];

MY_STRUCT 定义为:

typedef struct MY_STRUCT {
    INT Num;
    MsgType *Msg;
} MY_STRUCT;

谁能帮我解决这个警告?

【问题讨论】:

  • .Msg是什么,是指针吗?
  • Arr[i].Msg?的类型是什么
  • MsgType 是另一个struct
  • 它准确地告诉你你做错了什么。你正在传递Msg,一个指针。它不是int

标签: c arrays function pointers struct


【解决方案1】:

您的函数需要 INT 参数:

VOID myFunc(INT start, INT end)

不幸的是,您传递了 Arr[new_1].Msg 之类的东西,这是一个 MsgType 指针,因此是消息。

我怀疑你应该这样做:

myFunc (Arr[new_1].Num, Arr[new_2].Num);

【讨论】:

  • 但我想将 Msg 传递给函数,而不是 Num。如何进行类型转换?
  • 您确定要投射它吗?您很可能不想将myFunc 声明为接收int
  • @aod,如果要将消息传递给函数,则必须将函数签名更改为 VOID myFunc (MY_STRUCT start, MY_STRUCT end)
【解决方案2】:

您将函数声明为 int 但您传递的是指针。

尝试如下调用函数

myFunc (Arr[new_1].Msg,Arr[new_2].Msg);

你不需要像往常一样进行类型转换,声明你的函数接受 Msg 类型和调用,当然你需要在定义函数时处理这个

将你对函数的定义改为

VOID myFunc(MsgType  *msg1, MsgType  *msg2)
{
  //statements
}

【讨论】:

  • 但我想将 Msg 传递给函数,而不是 Num。如何进行类型转换?
  • @aod - 我更新了我的答案。试试看
  • 这是错误的。该函数应该接收MsgType *,而不是struct MY_STRUCT *
  • @Filipe - 感谢您的更正
  • 仍然是错误的:从 OP 的代码中,很明显 MsgType 是一个类型定义的名称;除非还存在具有相同标记的结构,否则您不能确定 struct MsgType 存在 - 再次,该函数应该接收 MsgType *。不要前缀“struct”·如果Msg被声明为MsgType *,就用那个。
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
相关资源
最近更新 更多