我有一些 C 代码我正试图翻译成 C# 代码并且我遇到了我不熟悉的指针,所以我不知道 C# 等价物。让我得到一些帮助?
案例1:给定C中的这三行,我如何在C#中声明p?
double snorm[169];
double *p = snorm;
*p = 1.0;
案例 2:我不知道指针实际上在做什么,所以我不知道如何将此行更改为 C#。
*(snorm+n) = *(snorm+n-1) * (double)(2*n-1) / (double)n;
第一的:
double[] snorm = new double[169];
snorm[0] = 1.0;
不仅仅是使用snorm
而不是p
.
第二:
snorm[n] = snorm[n-1] * (double)(2*n-1)/(double)n;
基本上*p
意味着您在内存地址获取值,由p
. 递增和添加指针正在移动内存中的指针,因此p++
,以及(p+1)
仅引用内存中的下一项(它在内存中实际移动的距离取决于指针指向的数据类型)。并且,*(p+n)
只是数组中第 n 项的值(如果p
指向数组)
无论如何,您应该熟悉指针。
该代码基本上使用指针作为数组访问的替代方法。所以你的第一个片段相当于:
double[] snorm = new double[169];
snorm[0] = 1.0;
下一位等价于:
snorm[n] = snorm[n-1] * (double)(2*n-1) / (double)n;
(我会使用更多的空间,但显然这是一个品味问题。)
唯一棘手的一点是如果某些东西增加了一个指针 - 那时你需要记住你基本上有一个额外的偏移量可以添加到任何未来的数组索引中。