0

嘿窥视,

我目前正致力于将一些旧的 C 库移植到 C#,但在理解包含指针的某段代码时遇到了一些麻烦。
在 C 方面不是最好的,所以我可能缺乏一些理解。

这是我正在查看的简化版本:

unsigned int block[2];

// --- inside a function

unsigned int *block;       // only got access to this pointer not the array
unsigned long left, right;

// some math


*block++ = right;  // these lines are the important bit i dont quite get
*block = left;

现在...

到目前为止,我认为我得到的是:

  • 第一行...
    • 取消引用指针
    • 将其值设置为right
    • 将指针向前步进 1
  • 而第二行...
    • 取消引用指针
    • 将其值设置为left

现在我难以理解的是最终结果 ( blocks[]) 的外观。
(遗憾的是,不能只是调试它并偷看一下,因为我真的不知道 id 如何使用 lib 二进制文件来做到这一点......)如果也是uints
会相当简单,但它们都是 ulongs 所以可能存在某种覆盖对吗?leftright

我对此有点困惑/迷失了......也许你们中的一些人有更好的C知识可以帮助我^^

4

1 回答 1

1

这基本上是在做:

block[0] = (unsigned int) right;
block[1] = (unsigned int) left;

并且转换unsigned longunsigned int简单地丢弃多余的高阶位。

于 2021-10-07T20:16:43.190 回答