我在OpenGL教程中遇到了以下几行,我想知道它的*(int*)意思是什么,它的价值是什么
if ( *(int*)&(header[0x1E])!=0 )
Run Code Online (Sandbox Code Playgroud)
Joh*_*ing 17
让我们一步一步:
header[0x1E]
Run Code Online (Sandbox Code Playgroud)
header必须是某种类型的数组,这里我们得到0x1E对数组中th元素的引用.
&(header[0x1E])
Run Code Online (Sandbox Code Playgroud)
我们取该元素的地址.
(int*)&(header[0x1E])
Run Code Online (Sandbox Code Playgroud)
我们将该地址转换为指向int的指针.
*(int*)&(header[0x1E])
Run Code Online (Sandbox Code Playgroud)
我们取消引用指向int的指针,int通过解释从offset开始的第一个sizeof(int)字节作为a 并获得它在那里找到的值.header0x1Eint
if ( *(int*)&(header[0x1E])!=0 )
Run Code Online (Sandbox Code Playgroud)
它将得到的值0与其进行比较,如果不是0,则执行if语句正文中的任何内容.
请注意,这可能非常危险.考虑如果header声明为:将会发生什么:
double header [0xFF];
Run Code Online (Sandbox Code Playgroud)
......或者:
int header [5];
Run Code Online (Sandbox Code Playgroud)
这真是一段可怕的代码,但它正在做的是:
&(header[0x1E])
Run Code Online (Sandbox Code Playgroud)
获取0x1E + 1数组的第()个元素的地址header,让我们称之为addr:
(int *)addr
Run Code Online (Sandbox Code Playgroud)
C风格将此地址转换为指向a的指针int,让我们调用此指针p:
*p
Run Code Online (Sandbox Code Playgroud)
将此内存位置取消引用int.
| 归档时间: |
|
| 查看次数: |
4993 次 |
| 最近记录: |