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

标签 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

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

最佳答案

这完全取决于 Xcp_Addr_t 的类型.你的表达是:&measurements[address] .表达式的类型可转换为 uint32* .如果您的返回类型是 uint32伪装,然后只需删除 &运算符(operator)。如果你的返回类型完全不同,你要重新考虑你在做什么。


所以你的 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)。

关于c++ - c 中不兼容的指针类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220952/

相关文章:

C:字符数组中的符号

c++ - 处理对象内对象的光照

c++ - 在 gui 中处理子级到父级鼠标和键盘事件的最佳方法?

c++ - 降低 C++ 中的圈复杂度

c++ - qt有没有watch变量调试功能

ios - 当使用序列数组每秒发回一个数字时,如何使多个声音一个接一个地播放

c - 当我使用 -std=gnu99 编译时,我还应该定义 _GNU_SOURCE 吗?

c线程;快速便携?

c - 是否可以在 GTK 中禁用、淡出或使对话框内的按钮不可点击?

arrays - 证明 Excel VBA Scripting.Dictionary 不保留项目插入顺序