对于知道一点c的人来说,这只是一个简单的问题。在表达的开头是什么意思? 如......
If (this == thisThingOverHere)
ThisThing = *((WORD *) &Array[withThisPosition]);
您可以假设WORD是16位无符号,而Array是8位字节数组。 很难尝试找出这里发生的事情。
干杯
答案 0 :(得分:8)
找出正在发生的事情并不困难。让我们分解吧。
&Array[withThisPosition]
这表示在Array中使用ThisPosition元素的地址。相当于Array + withThisPosition
。
(WORD *)
这说假设&Array[withThisPosition]
返回的指针实际上是指向WORD的指针。这被称为“强制转换”,因为您告诉编译器将对象与最初的Array
类型区别对待。
最后:
*(...)
这表示返回指向的对象。所以返回指向对象内的WORD。
如果我要为你改写这个,我可能会建议:
If (this == thisThingOverHere) {
void *pointerToArrayELement;
WORD *pointerToWORD;
WORD result;
pointerToArrayElement = &Array[withThisPosition];
pointerToWORD = (WORD *)pointerToArrayElement;
result = *pointerToWORD;
ThisThing = result;
}
答案 1 :(得分:6)
取消引用指针并获取相应的值。
示例:
#include <stdio.h>
int main(int argc, char **argv) {
int *i_ptr;
int i, j;
i = 5;
i_ptr = &i;
j = *i_ptr;
printf("%d\n", j);
return 0;
}
打印5
在C中,你有内存位置(想想那种“盒子”),值就在它们里面。每个内存位置都有一个地址,您可以将此地址存储到“指针变量”中,该变量使用类型声明,后跟*
。例如,i_ptr是指向整数(int *
)的指针,而i
和j
是整数。这意味着在内存中已经分配了三个“框”,其中两个将准备好包含实际数字(i
和j
),并且一个(i_ptr
)将准备包含一个地址到另一个框,并通知编译器引用的框将包含一个数字。
使用&
,您可以从方框名称中获取该方框的地址:&i
为您提供i
的地址,您可以将其存储到i_ptr
。< / p>
如果您拥有该框的地址,并且想要访问该框并获取该值,则可以使用*
,例如*i_ptr
为您提供i_ptr
中包含的地址框中包含的值。
答案 2 :(得分:2)
this-&gt;值与*(this)相同.value是取消引用指针。
答案 3 :(得分:1)
C具有指针的重要而强大的概念。你应该真正了解它们 - 一个好的教程是available here。
如果ptr
是指针,则*ptr
是指向的值。
答案 4 :(得分:1)
最简单的看一下表达式,然后将它们组合在一起。
&Array[withThisPosition]
这得到了数组withThisPosition
中Array
元素的地址。如果您选择,则可以将其写为:Array+withThisPosition
而不是。
(WORD *)
它说要接受它后面的任何内容(上面的位)并将其视为指向WORD
的指针。
最初的*
,然后说要取消引用该指针 - 即看看它指向的是什么。
总体而言,这是在withThisPosition
中找到一个职位(Array
),并查看该地址的WORD
,并将该字的值分配给ThisThing
答案 5 :(得分:1)
在C中使用*
有点令人困惑,因为它有两个不同但相关的含义。你的例子令人困惑,因为这些含义的两个用法都在同一行代码中使用。
当紧邻某个类型时,*
是一个修饰符,表示您指的是指向该类型的指针。这在变量声明中最常见,但也可以在强制转换中使用,正如您在此处看到的(WORD *)
。
当不与类型一起使用时,*
是一个取消引用指针的一元运算符。换句话说,它获取操作数的值,将其视为内存位置,并返回该位置的内容。运算符还确定操作数指向的变量类型,并将内存位置的值转换为该类型。编译器通常会进行检查以确保操作数实际上是一个指针。在这种情况下,编译器知道&Array[withThisPosition])
是指向一个字节的指针,因为Array
是一个字节数组。
回到你的问题,通常当*
位于C语句的开头时,它是解引用运算符,但我不保证总是这样。
一旦我将大脑中*
的两个含义分开,指针就会减少头痛。
答案 6 :(得分:0)
你的表情中有一些不匹配的parens。我假设你的意思是:
ThisThing = *((WORD *) &Array[withThisPosition]);
的
(WORD *) &Array[withThisPosition]
部分是指向WORD的类型指针。领先的*指责指针。所以
*((WORD *) &Array[withThisPosition])
是WORD类型。