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 *)something
将 something
转换为指定类型的指针,因此 (UInt32 *)(errorString + 1)
是现在是指向 UInt32
类型数据的指针。
*
是一个取消引用运算符,因此将其应用于指针可以获取指针所指向的任何内容(例如,如果 pointer
指向一个整数, *指针
将是一个整数)。
总而言之,此构造将尝试从指定位置提取 UInt32
类型的数据。
关于c++ - 括号内和括号外的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007880/