Zeiger in C# zu machen int-array?
Den folgenden C++ - Programm wird kompiliert und läuft, wie erwartet:
#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();
}
Den nächsten C# einfaches Beispiel, ich könnte für diese Frage ist:
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;
}
}
Also wie mache ich die Zeiger?
- Fragen Sie sich, warum Sie wollen, zu manipulieren Zeiger direkt in einer verwalteten Sprache.
- Weil mir langweilig ist 😀
- Lindern Sie Ihre Langeweile mit dem Lesen Kapitel 18 der Spezifikation-zweimal -, bevor Sie versuchen zu schreiben, unsichere code in C#.
Du musst angemeldet sein, um einen Kommentar abzugeben.
C# ist nicht C++ - erwarten Sie nicht die gleichen Dinge auf der Arbeit in C# und arbeitete in C++. Es ist eine andere Sprache, mit inspiration in die syntax.
In C++, array-Zugriff ist ein kurzer hand für pointer-manipulation. Das ist, warum die folgenden sind die gleichen:
Dies ist jedoch nicht wahr, in C#.
5[test]
gilt nicht C#, da es keine index-Eigenschaft auf System.Int32.In C#, die Sie nur sehr selten zu tun haben wollen mit Zeigern. Du bist besser dran, nur behandelt er es als ein int-array direkt:
Wenn Sie wirklich wollen befassen sich mit zeigermathematik aus irgendeinem Grund, müssen Sie markieren Sie Ihre Methode unsicher, und legen Sie es in eine fester Rahmen. Dieser würde nicht typisch in C#, und ist wirklich wohl etwas völlig unnötig.
Wenn Sie wirklich wollen, um diese Arbeit zu machen, die nächsten, die Sie tun können, in C# wäre:
(Wieder, das ist wirklich seltsam C# - nicht etwas, was ich empfehlen würde...)
test[5]
unter der Haube des CLR tun werden, ein bounds-check, gefolgt von Zeigerarithmetik und Dereferenzierung. Sie sind sich nicht zu verlieren, low-level-manipulation in diesem Fall.Müssen Sie die pin-array mit den
fixed
Schlüsselwort, damit es nicht verschoben werden, von der GC:Jedoch unsichere code in C# ist eher die Ausnahme als die Regel. Ich würde versuchen, übersetzen Sie Ihr C-code nicht unsicherer C# code.
Müssen Sie lernen, die Sprache C#. Es gibt zwar syntaktischen ähnlichkeit zu C/C++, - wie Java - hat einen ganz anderen Ansatz.
In C# Objekte Verhalten sich standardmäßig als Referenzen. Das heißt, Sie müssen nicht angeben, Zeiger-Referenzierung (&) und Dereferenzierung ( * ) - syntax.