397 Stimmen

Wie findet man die 'sizeof' (einen Zeiger, der auf ein Array zeigt)?

Zunächst einmal ist hier etwas Code:

int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}

Gibt es eine Möglichkeit, die Größe des Arrays herauszufinden, das ptr verweist (anstatt nur die Größe anzugeben, die auf einem 32-Bit-System vier Byte beträgt)?

0voto

ivan.ukr Punkte 2480

Es gibt ein beliebtes Makro, das Sie definieren können, um die Anzahl der Elemente im Array zu ermitteln (Microsoft CRT stellt es sogar als OOB mit dem Namen _countof ):

#define countof(x) (sizeof(x)/sizeof((x)[0]))

Dann können Sie schreiben:

int my_array[] = { ... some elements ... };
printf("%zu", countof(my_array)); // 'z' is correct type specifier for size_t

0voto

user3065147 Punkte 11
 #define array_size 10

 struct {
     int16 size;
     int16 array[array_size];
     int16 property1[(array_size/16)+1]
     int16 property2[(array_size/16)+1]
 } array1 = {array_size, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

 #undef array_size

array_size wird an die Größe variabel:

#define array_size 30

struct {
    int16 size;
    int16 array[array_size];
    int16 property1[(array_size/16)+1]
    int16 property2[(array_size/16)+1]
} array2 = {array_size};

#undef array_size

Die Verwendung ist:

void main() {

    int16 size = array1.size;
    for (int i=0; i!=size; i++) {

        array1.array[i] *= 2;
    }
}

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