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
指向整数,则*pointer
将是整数)。
总而言之,此构造将尝试从指定位置提取类型为UInt32
的数据。
关于c++ - 指针内部和外部的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42007880/