gpt4 book ai didi

c# - 在 C# 中创建 int 数组的指针?

转载 作者:可可西里 更新时间:2023-11-01 16:54:29 26 4
gpt4 key购买 nike

以下 C++ 程序按预期编译和运行:

#include <stdio.h>

int main(int argc, char* argv[])
{
int* test = new int[10];

for (int i = 0; i < 10; i++)
test[i] = i * 10;

printf("%d \n", test[5]); // 50
printf("%d \n", 5[test]); // 50

return getchar();
}

对于这个问题,我能做的最接近的 C# 简单示例是:

using System;

class Program
{
unsafe static int Main(string[] args)
{
// error CS0029: Cannot implicitly convert type 'int[]' to 'int*'
int* test = new int[10];

for (int i = 0; i < 10; i++)
test[i] = i * 10;

Console.WriteLine(test[5]); // 50
Console.WriteLine(5[test]); // Error

return (int)Console.ReadKey().Key;
}
}

那么如何制作指针呢?

最佳答案

C# 不是 C++ - 不要期望在 C# 中工作的东西与在 C++ 中工作的东西相同。这是一种不同的语言,在语法上有一些启发。

在 C++ 中,数组访问是指针操作的简写。这就是以下内容相同的原因:

test[5]
*(test+5)
*(5+test)
5[test]

但是,在 C# 中并非如此。 5[test] 不是有效的 C#,因为 System.Int32 上没有索引器属性。

在 C# 中,您很少需要处理指针。你最好直接把它当作一个 int 数组:

int[] test = new int[10];

如果出于某种原因你真的想要处理指针数学,你需要标记你的方法unsafe , 并将其放入 fixed context .这在 C# 中并不常见,而且实际上可能完全没有必要。

如果您真的想要完成这项工作,您可以在 C# 中做的最接近的事情是:

using System;

class Program
{
unsafe static int Main(string[] args)
{
fixed (int* test = new int[10])
{

for (int i = 0; i < 10; i++)
test[i] = i * 10;

Console.WriteLine(test[5]); // 50
Console.WriteLine(*(5+test)); // Works with this syntax
}

return (int)Console.ReadKey().Key;
}
}

(再说一次,这真的很奇怪 C#——我不推荐...)

关于c# - 在 C# 中创建 int 数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2546706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com