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指向整数,则*pointer将是整数)。

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

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

10-13 06:50