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

C++ c中不兼容的指针类型警告?,c++,c,arrays,pointers,memory-address,C++,C,Arrays,Pointers,Memory Address,address是我从客户端接收的值(例如:0,1,2…)。上述函数用于将测量地址返回给其他内部函数。我收到如下警告: uint32 measurements [32]; Xcp_Addr_t XcpApp_ConvertAddress( uint32 address, uint8 extension ) { return &measurements[address]; //return from incompatible pointer type } 谁能告诉我怎么解

address是我从客户端接收的值(例如:0,1,2…)。上述函数用于将测量地址返回给其他内部函数。我收到如下警告:

uint32 measurements [32];

Xcp_Addr_t XcpApp_ConvertAddress( uint32 address, uint8 extension )
{

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

}

谁能告诉我怎么解决这个问题吗?

这取决于
Xcp\u Addr\u t
的类型。您的表达式是:
&度量值[地址]
。表达式的类型可转换为
uint32*
。如果您的返回类型是伪装的
uint32
,则只需删除
&
运算符即可。如果你的回报类型完全不同,你需要重新思考你在做什么


因此,您的typedef是:

return from incompatible pointer type
如您所见,
uint8*
(返回类型)和
uint32*
(实际返回值的类型)不匹配。您可以将返回类型或阵列测量类型更改为:

typedef uint8* Xcp_Addr_t;

好的,那么您需要确保
XcpApp\u ConvertAddress
返回一个有效指针(不越界)。你有两个选择:

  • 坚持
  • 抛出异常
您可以通过执行以下操作来断言它:

uint8 measurements[32];

(注意,对于
std::runtime\u error
,您需要
#包含

您必须决定是否要返回
测量值[地址]
或其指针

Xcp\u Addr\u t
的类型定义是什么?类型定义uint8*Xcp\u Addr\t;那么,
uint8\u t*
uint32\u t*
不一样-我想你有理由吧?应该是uint8测量[32];在返回之前,您可能还需要检查
地址<32
;否则将执行越界数组访问。Xcp_Addr_t XcpApp_ConvertAddress(uint32地址,uint8扩展名){/*TODO:检查此实现/int i;/假定不需要转换。*/for(i=0;i@user3383557,您总是要返回第一个元素的指针。如果(地址<32)返回&measurents[address];我想返回度量值的地址,因此声明变量'Xcp_Addr_t'如'typedef uint8*Xcp_Addr_t;'@Anis_Stack请将代码部分添加到答案中。
assert(address < 32);
return &measurements[address];
if (address < 32) throw std::runtime_error("out of bounds");
return &measurements[address];