【发布时间】:2021-10-07 20:10:51
【问题描述】:
嘿,窥视,
我目前正在将一些旧的 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是否曾在函数内部初始化过? -
嘿@sj95126 可能应该提到过,呵呵,
block在它交给函数之前被初始化。 @Barmar 已经给了我正在寻找的答案,但仍然感谢您的回答! ^^ -
我的意思是您将
unsigned int *block称为“函数内部”-在这种情况下,block是函数的参数还是局部变量?只需确保指针具有有效值,或者取消引用它将是可能“发生”工作的未定义行为。但是,如果 Barmar 解决了您的问题,那就太好了!