3 Stimmen

Wie finde ich die Anzahl der Bytes, die von einem Zeiger verwendet werden?

Ich habe einen Zeiger (uint8_t *myPointer), den ich als Parameter an eine Methode übergebe, und dann setzt diese Methode einen Wert auf diesen Zeiger, aber ich möchte wissen, wie viele Bytes von der Variablen myPointer verwendet werden.

Vielen Dank im Voraus.

0 Stimmen

@Stefan - kannst du einen Link zum Duplikat hinzufügen?

0 Stimmen

11voto

GManNickG Punkte 476445

Die Größe des Zeigers: sizeof(myPointer) (Gleich sizeof(uint8_t*))
Die Größe des Zeigen auf-Gegenstand: sizeof(*myPointer) (Gleich sizeof(uint8_t))

Wenn Sie meinen, dass dies auf ein Array zeigt, gibt es keine Möglichkeit, das zu wissen. Ein Zeiger zeigt nur an und kümmert sich nicht darum, wo der Wert herkommt.

Um ein Array über einen Zeiger zu übergeben, müssen Sie auch die Größe übergeben:

void foo(uint8_t* pStart, size_t pCount);

uint8_t arr[10] = { /* ... */ };
foo(arr, 10);

Sie können ein Template verwenden, um das Übergeben eines gesamten Arrays einfacher zu machen:

template 
void foo(uint8_t (&pArray)[N])
{
    foo(pArray, N); // rufen Sie ein anderes foo auf, füllen Sie die Größe ein.
    // könnten auch einfach Ihre Funktion dort schreiben, wobei N als Größe verwendet wird
}

uint8_t arr[10] = { /* ... */ };
foo(arr); // N wird abgeleitet

0 Stimmen

+1 - es sollte jedoch beachtet werden, dass wenn foo eine große Funktion ist, Sie bei der Verwendung des Templates Codeaufblähungen verursachen, wenn die Anzahl der verschiedenen Werte von N groß ist. Dies kann durch Erstellen eines Stubs für foo, der eine Überlastung von foo aufruft, die einen expliziten Längenparameter akzeptiert, gemindert werden.

3voto

Billy ONeal Punkte 100691

Du kannst es nicht. Du musst die Größe des vom Zeiger verwiesenen Puffers selbst übergeben.

0voto

Stefan Valianu Punkte 1320

Du kannst nicht. Es sei denn, das Array wird zur Compile-Zeit instanziiert. Beispiel int test[] = {1, 2, 3, 4}; In diesem Fall kannst du sizeof(test) verwenden, um dir die richtige Größe zurückzugeben. Andernfalls ist es unmöglich, die Größe eines Arrays ohne Speicherung eines eigenen Zählers zu ermitteln.

0voto

AndiDog Punkte 65445

Ich gehe davon aus, dass Sie den Speicherbedarf nur für den Zeiger meinen. Dies können Sie zur Kompilierzeit mit sizeof(myPointer) überprüfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X