c中不兼容的指针类型警告?

时间:2014-03-06 10:00:12

标签: c++ c arrays pointers memory-address

uint32 measurements [32];

Xcp_Addr_t XcpApp_ConvertAddress( uint32 address, uint8 extension )
{

    return &measurements[address];  //return from incompatible pointer type 

}

地址是我从客户端收到的值(例如:0,1,2 .....)。上述功能是将测量地址返回给其他内部功能。我收到如下警告:

return from incompatible pointer type

谁能告诉我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这一切都取决于Xcp_Addr_t的类型。你的表达是:&measurements[address]。表达式的类型可转换为uint32*。如果您的回复类型是伪装的uint32,那么只需删除&运算符即可。如果您的退货类型完全不同,您需要重新考虑您正在做的事情。


所以你的typedef是:

typedef uint8* Xcp_Addr_t;

正如您所看到的那样uint8*(返回类型)和uint32*(实际返回值的类型)不匹配。您可以将返回类型或数组measurements的类型更改为:

uint8 measurements[32];

好的,所以你要确保XcpApp_ConvertAddress返回一个有效的指针(不超出界限)。你有两个选择:

  • 断言
  • 抛出异常

您可以通过执行以下操作来断言:

assert(address < 32);
return &measurements[address];

在这种情况下,如果传递给函数的地址不正确,程序将在运行时失败(请注意,您必须添加#include <cassert>才能使用assert)。

或者你可以抛出异常:

if (address < 32) throw std::runtime_error("out of bounds");
return &measurements[address];

(请注意#include <stdexcept>}需要std::runtime_error

答案 1 :(得分:0)

你必须决定是否要返回measurements[address]或其指针的值!