c++ - 括号内和括号外的指针

标签 c++ c pointers

char errorString[20];
//See if it appears to be a 4-char-code
*(UInt32 *) (errorString + 1) = CFSwapInt32HostToBig(error);
if (isprint(errorString[1]) && isprint(errorString[2]) && isprint(errorString[3]) && isprint(errorString[4]))
{
    errorString[0] = errorString[5] = '\'';
    errorString[6] = '\0';
}

函数的这一部分接受一个字符串(error)并检查它是否包含 4 个字符的代码。

发生了什么:*(UInt32 *) (errorString + 1)

为什么括号内外都有一个指针,以及如何将值赋给errorString + 1

最佳答案

errorString 可以被视为一个指针,因此,可以对其进行数学运算,例如,将整数相加。 errorString + 1 也是一个指针。它是一个指向 errorString 所指向的位置的指针。

(UInt32 *)somethingsomething 转换为指定类型的指针,因此 (UInt32 *)(errorString + 1) 是现在是指向 UInt32 类型数据的指针。

* 是一个取消引用运算符,因此将其应用于指针可以获取指针所指向的任何内容(例如,如果 pointer 指向一个整数, *指针将是一个整数)。

总而言之,此构造将尝试从指定位置提取 UInt32 类型的数据。

关于c++ - 括号内和括号外的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007880/

相关文章:

c++ - 模板类型构造函数参数

c - 我如何让 C 编译器安静下来,让函数指针接受任意数量的参数?

c - Lua调用C函数的性能

无法打开/dev/dsp

c - 缺少删除 sll 最后一个节点的情况

ios - 使用指针的简单函数会导致内存错误

c++ - 使用 C++ 教程和示例代码的音频流

c++ - C26486 与 string_view

c++ - std::condition_variable::notify_one() 不唤醒等待线程

c - 使用指向结构的指针分配、填充和操作指针数组