对于那些了解一点c的人来说,这只是一个简单的问题.在表达的开头是什么意思?如......
If (this == thisThingOverHere)
ThisThing = *((WORD *) &Array[withThisPosition]);
Run Code Online (Sandbox Code Playgroud)
您可以假设WORD是16位无符号,而Array是8位字节数组.很难尝试找出这里发生的事情.
干杯
弄清楚正在发生的事情并不困难.让我们分解吧.
&Array[withThisPosition]
Run Code Online (Sandbox Code Playgroud)
这表示使用Array中的ThisPosition元素的地址.相当于Array + withThisPosition.
(WORD *)
Run Code Online (Sandbox Code Playgroud)
假设返回的指针&Array[withThisPosition]实际上是指向WORD的指针.这被称为"强制转换",因为您告诉编译器将对象与Array最初的类型区别对待.
最后:
*(...)
Run Code Online (Sandbox Code Playgroud)
这表示返回指向的对象.因此返回指向对象内的WORD.
如果我要为你改写这个,我可能会建议:
If (this == thisThingOverHere) {
void *pointerToArrayELement;
WORD *pointerToWORD;
WORD result;
pointerToArrayElement = &Array[withThisPosition];
pointerToWORD = (WORD *)pointerToArrayElement;
result = *pointerToWORD;
ThisThing = result;
}
Run Code Online (Sandbox Code Playgroud)
取消引用指针并获取相应的值.
例:
#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;
}
Run Code Online (Sandbox Code Playgroud)
打印5
在C中,你有内存位置(想想那种"盒子"),值就在它们里面.每个内存位置都有一个地址,您可以将此地址存储到"指针变量"中,该变量使用类型声明,后跟a *.例如,i_ptr是指向integer(int *)的指针,i而且j是整数.这意味着在内存中,已经分配了三个"盒子",两个将准备好包含实际数字(i和j),一个(i_ptr)将准备好包含另一个盒子的地址,并通知编译器引用的盒子将包含一个数字.
与&你从盒名盒子的地址:&i给你的地址i,你可以把它存入i_ptr.
如果您拥有该框的地址,并且想要访问该框并获取您使用的值*,例如,*i_ptr为您提供包含在包含的地址框中的值i_ptr.