Kopieren einer Teilmenge eines Arrays in ein anderes Array / Array-Slicing in C

Lesezeit: 2 Minuten

Gibt es in C einen integrierten Array-Slicing-Mechanismus?

Wie in Matlab zum Beispiel A(1:4)

würde = erzeugen

 1     1     1     1

Wie kann ich das in C erreichen?

Ich habe versucht zu suchen, aber das nächste, was ich finden konnte, ist das: http://cboard.cprogramming.com/c-programming/95772-how-do-array-subsets.html

subsetArray = &bigArray[someIndex]

Dies gibt jedoch nicht genau das in Scheiben geschnittene Array zurück, sondern einen Zeiger auf das erste Element des in Scheiben geschnittenen Arrays …

Danke vielmals

  • In C ist es üblich, Zeiger auf das erste Element eines Arrays zurückzugeben, da Zeiger und Arrays sehr ähnlich behandelt werden. Lies dir mal das durch: c-faq.com/aryptr/index.html insbesondere 6.3 und 6.8

    – Timothy Jones

    31. Januar 2013 um 4:16 Uhr

Das ist in std C nicht möglich. Du musst es selber machen. Wenn Sie eine Zeichenfolge haben, können Sie die Bibliothek string.h verwenden, die sich darum kümmert, aber für Ganzzahlen gibt es keine Bibliothek, die ich kenne. Abgesehen davon, nachdem Sie das haben, was Sie haben, ist der Punkt, an dem Sie mit Ihrer Teilmenge beginnen möchten, eigentlich einfach zu implementieren.

Angenommen, Sie kennen die Größe Ihres ‘Haupt’-Arrays und das ist ein Integer-Array, können Sie Folgendes tun:

subset = malloc((arraySize-i)*sizeof(int)); //Where i is the place you want to start your subset. 

for(j=i;j<arraySize;j++)
   subset[j] = originalArray[j];

Hoffe das hilft.

Vielen Dank an alle für den Hinweis, dass es in C keinen solchen eingebauten Mechanismus gibt.

Ich habe versucht, das zu verwenden, was @Afonso Tsukamoto vorgeschlagen hat, aber mir wurde klar, dass ich eine Lösung für mehrdimensionale Arrays brauchte. Also schrieb ich schließlich meine eigene Funktion. Ich werde es hier einfügen, falls jemand anderes nach einer ähnlichen Antwort sucht:

void GetSlicedMultiArray4Col(int A[][4], int mrow, int mcol, int B[1][4], int sliced_mrow)
{
    int row, col;
    sliced_mrow = sliced_mrow - 1; //cause in C, index starts from 0
    for(row=0; row < mrow; row++)
    {
        for (col=0; col < mcol; col++)
        {
            if (row==sliced_mrow) B[0][col]=A[row][col];
        }
    }
}

A ist also meine Eingabe (ursprüngliches Array) und B ist meine Ausgabe (das in Scheiben geschnittene Array). Ich rufe die Funktion so auf:

GetSlicedMultiArray4Col(A, A_rows, A_cols, B, target_row);

Zum Beispiel:

int A[][4] = {{1,2,3,4},{1,1,1,1},{3,3,3,3}};
int A_rows = 3; 
int A_cols = 4; 
int B[1][4]; //my subset
int target_row = 1;

GetSlicedMultiArray4Col(A, A_rows, A_cols, B, target_row);

Dies erzeugt ein Ergebnis (mehrdimensionales Array B[1][4]), die in Matlab gleich dem Ergebnis von A(target_row,1:4) ist.

Ich bin neu in C, also korrigiere mich bitte, wenn ich falsch liege oder wenn dieser Code besser gemacht werden kann … Nochmals vielen Dank 🙂

In C wird der Name des Arrays meines Wissens nur als konstanter Zeiger angesehen. Sie wissen also nie, wie groß die Teilmenge ist. Außerdem können Sie einer neuen Adresse ein Array zuweisen. Sie können stattdessen einfach einen Zeiger verwenden. Aber Sie sollten die Größe der Teilmenge selbst verwalten.

1432410cookie-checkKopieren einer Teilmenge eines Arrays in ein anderes Array / Array-Slicing in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy