这个 C 指针代码产生了什么? [ulong 指针 -> uint]
What does this C Pointer Code Produce? [ulong pointer -> uint]
大家好,
我目前正致力于将一些旧的 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 二进制文件做到这一点的...)
如果 left
和 right
也是 uint 会相当简单,但它们都是 ulong,所以可能正在进行某种覆盖,对吗?
对此我有点困惑/迷茫...
也许你们中有更好的 C 知识的人可以帮助我 ^^
这基本上是在做:
block[0] = (unsigned int) right;
block[1] = (unsigned int) left;
并且将 unsigned long
转换为 unsigned int
只是丢弃多余的高位。
大家好,
我目前正致力于将一些旧的 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 二进制文件做到这一点的...)
如果 left
和 right
也是 uint 会相当简单,但它们都是 ulong,所以可能正在进行某种覆盖,对吗?
对此我有点困惑/迷茫... 也许你们中有更好的 C 知识的人可以帮助我 ^^
这基本上是在做:
block[0] = (unsigned int) right;
block[1] = (unsigned int) left;
并且将 unsigned long
转换为 unsigned int
只是丢弃多余的高位。