C# Array ab Feld [1] übergeben

Gast #2832159
Lesenswert?

Hallo,

C# mag eine sichere und "schöne" Sprache sein.
Sie bringt einen aber auch zur Verzweiflung.

In C kann ich folgendes machen:

-------------------------------------
u16 aArray[7];

main()
{
   Funktion(&aArray[1]);

}


void Funktion(u16 *p)
{
   ...
   ...
}
-------------------------------------

Angenommen bai aArray[0] ist ein Inhalt, den ich der Funktion nicht 
geben möchte.

Ich übergebe der Funktion die Adresse vom Feld aArray[1].
Könnte genauso &aArray[0] oder aArray der Funktion übergeben.


Wie könnte ich das in C# machen.


Möchte quasi folgendes tun:
            byte* b;
            b = &aArray[1];

Folgendes geht in C#
Funktion(aArray, len);

Funktion(byte[] aArr, byte datalength)
{

}

Ich möchte aber das aArray erst ab der Stelle [1] übergeben.

Hat jemand eine Idee?
Gast #2832196
Lesenswert?

Janosch schrieb:
> Hat jemand eine Idee?

die Frage ist wozu?

du kannst z.b. einen Enumerator ab der 1.stelle übergeben, damit kann 
dann die funktion von dort bis zum ende das array durchlaufen.

Dein Beispiel mit C ist aber auch sehr kurz gedacht, denn es geht schon 
nicht mehr mit einem std::Vektor oder einer std::List.
Gast #2832282
Lesenswert?

Danke,

das war bislang die konstruktivste Antwort.

bluppdidupp schrieb:
> Man könnte die Funktion auch um nen Parameter "offset" erweitern, mit
>
> der die Funktion dann weiß wo sie im Array mit lesen anfangen soll



Das oben ist nur ein Beispiel. Natürlich übergibt man noch eine 
Längeninformation.

Gibt es andere Möglichkeiten?
Gast #2832304
Lesenswert?

Janosch schrieb:
> Kann ich in C# nicht irgendwie die Adresse des aArray[1] ermitteln und
> diese der Funktion übergeben? Der aArray Typ ist ja bekannt.

man kann schon, man sollte nicht. die zauberwörter an der stelle sind 
unsafe und fixed.
1
byte[] aArr = new byte[10];
2

3
fixed (byte* pSrc = aArr)
4
{
5
    // do something silly here
6
}

wesentlich besser wäre wirklich einfach den offset mitzugeben oder (zur 
not) eine kopie des arrays ohne die gewünschten elemente zu erstellen.
Gast #2832308
Lesenswert?

Janosch schrieb:
> Kann ich in C# nicht irgendwie die Adresse des aArray[1] ermitteln und
> diese der Funktion übergeben? Der aArray Typ ist ja bekannt.

nein weil array selber ein eigener objekt type ist. die [] ist 
überladen. Aus dem Grund kann man auch eigenschaften vom array abfragen 
was bei C nicht geht.

array.length usw.


du könntest alle werte in ein neues array kopieren ohne den erste 
eintrag. Ich programmiere auch schon eine weile C# und habe soetwas noch 
nicht gebraucht. Da es das nun auch nicht gibt, stellt sich die Frage 
warum du etwas brauchst was sonst scheinbar niemand braucht.
Gast #2832318
Lesenswert?

weil die funktion nicht alle werte braucht
is nur die frage warum er in c# mit globalen arbeitet

mach halt folgendes


int[] aArray = new int[7];

main()
{
   int[] copy = new int[aArray.Length-1]

   aArray.CopyTo(copy, 1);
   Funktion(copy);

}

void foo(int[] test)
{
}
#2836484
Lesenswert?

wenn du das erste element nicht übergeben willst, vermute ich, dass es 
eine andere bedeutung hat, als der rest des arrays.

wie wärs mit ner eigenen klasse für das array?

beispielsweise so
1
public class MyArray
2
{
3
  public uint16 FirstElement;
4
  public List<uint16> RestElements;
5
}
6

7
public static Function(MyArray.RestElements ToProcess)
8
{
9
...
10
}

wenn du das array komplett brauchst, musst du nur die get methode von 
RestElements dementsprechend anpassen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren