我有一个我正在分析的 C 代码,并且有这样的东西:
variable = (unsigned long)rx;
如果rx
是一个十六进制数的数组并且变量是unsigned long
,那么变量将持有什么?unsigned long
格式中的第一个元素?
我有一个我正在分析的 C 代码,并且有这样的东西:
variable = (unsigned long)rx;
如果rx
是一个十六进制数的数组并且变量是unsigned long
,那么变量将持有什么?unsigned long
格式中的第一个元素?
请记住,数组衰减为指针。所以将会发生的事情是强制转换会将指针(即内存地址)转换为 anunsigned long
并将其分配给variable
.
由于只要您使用数组的名称,数组就会衰减为指针,并且不尊重它,您将获得一个地址。
因此:
variable = (unsigned long)rx;
将分配rx[]
的地址variable
作为一个无符号长值。而这:
variable = (unsigned long)*rx;
或这个:
variable = (unsigned long)rx[0];
会给你第一个元素的值rx[]
(注意语法rx[0]
基本上是说取基地址rx
+0
偏移量,取消引用并返回结果)