如何将 int 指针转换为浮点指针
How to cast int pointer to float pointer
我正在对包含许多类似于以下内容的强制转换的库运行 cppcheck (c++11(:
// Allocates various buffers
int* i_buffer = (int*) calloc (500, sizeof (int));
float* f_buffer = (float*) i_buffer;
对于这些强制转换,我看到以下消息:
"可移植性","无效指针转换","整数* 和浮点数* 之间的转换,它们具有不兼容的二进制数据表示形式。">
执行上面显示的铸造类型的正确方法是什么?按照上面显示的方式投射指针的潜在后果是什么?
如何将 int 指针转换为浮点指针
使用重新解释转换。
但不要尝试这样做,因为重新解释的指针将没有用。
执行上面显示的铸造类型的正确方法是什么?
显示的演员阵容本身已经很好地定义了;做这样的演员表是没有用的。
如果需要分配浮点数数组,可以改用以下内容:
std::vector<float>(500);
严格来说,由于严格的混叠冲突,代码的行为是未定义的。
实际上,如果int
和float
的大小相同(它们在许多桌面平台上,尽管有一些推动力将int
移动到 64 位(,则代码将运行而不会出错。虽然要重申一下,从标准C++的角度来看,这一点绝对没有保证。
但是您仍然应该修复它。直接分配float
数组是明智的做法:
float* f_buffer = (float*) calloc (500, sizeof (float));
按 new 使用旧样式的 C 数组也是合法的(这是C++标准(:
float* f_buffer = new float[500];
请注意,使该内存的释放适应:
delete [] f_buffer;
应始终避免类型强制转换,以保持代码干净,并允许编译器验证代码的正确性。
相关文章:
- 正在将指针转换为范围
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- C++:Lambda 函数指针转换的用例是什么?
- 如何将 int 指针转换为浮点指针
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- C++中数组大小未知的指针转换
- Antlr cpp 运行时 任何错误的指针转换?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- C 指针转换会导致内存访问冲突
- 模板类实例化中的指针转换无效
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 如何将 void(*)() 类型的指针转换为 void*
- 数组到指针转换期间的临时具体化
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 将基类指针转换为派生的类指针
- 应对 std::字符串中的 std::<char>指针转换后的向量
- 在编译时将函数指针转换为 std::uintptr_t
- 将基类指针转换为未知派生类指针