Wie erhält man die Arraygröße innerhalb der Funktion?

Ich habe Probleme, einen Weg zu finden, um die Array-Größe aus einer Funktion heraus zu ermitteln. Hier ist mein Code:

#include <stdio.h>

void printBuff(char *buf);
int main()
{
    char arr[12] = "csdlnclskjn";
    printf("Array size: %d, element size: %d. ",sizeof(arr), sizeof(arr[0]));
    printBuff(arr);
    return 0;
}

void printBuff(char *buf){
    printf("Array size: %d, element size: %d.",sizeof(buf), sizeof(buf[0]));
}

Wie oben gezeigt, macht printBuff dasselbe wie die zweite Zeile in der Hauptfunktion. Die Ausgaben sind jedoch unterschiedlich:

Array-Größe: 12, Elementgröße: 1. Array-Größe: 4, Elementgröße: 1.

enn ich darüber nachdenke, verstehe ich, warum die Ausgabe in der printBuff () -Methode 4 ist. Tatsächlich ist arr ein Zeiger auf das erste Element des Arrays. Bei einer 32-Bit-Architektur gibt sizeof (arr) dann 4 und bei einer 64-Bit-Architektur 8 zurück. Ich verstehe nicht, warum sizeof (arr) die Größe des Arrays anstelle der Anzahl der Bytes von zurückgibt der Zeiger, wenn er in der main () - Funktion verwendet wird. Immerhin ist arr, wenn es in main () aufgerufen wird, immer noch ein Zeiger, oder?

Also meine Fragen sind:

Wie kommt es, dass sizeoff () je nach Kontext, in dem es verwendet wird, unterschiedlich interpretiert wird? Wovon hängt das ab?

Wie Sie die tatsächliche Array-Größe (Anzahl der Elemente im Array) aus einer Funktion abrufen können, ohne die Größe als Argument zu übergeben, ohne Methoden wie das Durchlaufen des Arrays beim Inkrementieren eines Zählers zu verwenden, bis '\ 0' erreicht ist Der einfachste Weg, die Array-Größe unabhängig vom Kontext zu ermitteln.

Incidentally, wo speichert der Compiler / das System, der / das für das Merken der Größe des Arrays verantwortlich ist, die Größe des Arrays? Wie ist es mit dem Array verbunden und wie wird es abgerufen?

Ich wollte ein Array mit sizeof (buf), / sizeof (buf [0]) als Größe des Arrays durchlaufen, aber anscheinend ist das nicht möglich.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage