Wenn array
es sich wirklich um ein Array handelt, können Sie es mit "nullen":
memset(array, 0, sizeof array);
Es gibt jedoch zwei Punkte, die Sie kennen sollten:
- Dies funktioniert nur, wenn
array
es sich tatsächlich um ein "Two-D-Array" handelt, dh T array[M][N];
für einen Typ deklariert wurde T
.
- es funktioniert nur in dem Bereich, in dem
array
deklariert wurde. Wenn Sie es an eine Funktion übergeben, wird der Name array
zu einem Zeiger und sizeof
gibt Ihnen nicht die Größe des Arrays.
Lassen Sie uns ein Experiment machen:
#include <stdio.h>
void f(int (*arr)[5])
{
printf("f: sizeof arr: %zu\n", sizeof arr);
printf("f: sizeof arr[0]: %zu\n", sizeof arr[0]);
printf("f: sizeof arr[0][0]: %zu\n", sizeof arr[0][0]);
}
int main(void)
{
int arr[10][5];
printf("main: sizeof arr: %zu\n", sizeof arr);
printf("main: sizeof arr[0]: %zu\n", sizeof arr[0]);
printf("main: sizeof arr[0][0]: %zu\n\n", sizeof arr[0][0]);
f(arr);
return 0;
}
Auf meinem Computer wird Folgendes gedruckt:
main: sizeof arr: 200
main: sizeof arr[0]: 20
main: sizeof arr[0][0]: 4
f: sizeof arr: 8
f: sizeof arr[0]: 20
f: sizeof arr[0][0]: 4
Obwohl arr
es sich um ein Array handelt, zerfällt es bei Übergabe in einen Zeiger auf sein erstes Element f()
, und daher sind die eingedruckten Größen f()
"falsch". In f()
der Größe von arr[0]
ist auch die Größe des Arrays arr[0]
, das ein "Array [5] von int
" ist. Es ist nicht die Größe von a int *
, da das "Zerfallen" nur auf der ersten Ebene stattfindet, und deshalb müssen wir deklarieren f()
, dass ein Zeiger auf ein Array mit der richtigen Größe verwendet wird.
Wie ich bereits sagte, funktioniert das, was Sie ursprünglich getan haben, nur, wenn die beiden oben genannten Bedingungen erfüllt sind. Wenn nicht, müssen Sie tun, was andere gesagt haben:
memset(array, 0, m*n*sizeof array[0][0]);
Schließlich memset()
und die von for
Ihnen gepostete Schleife sind im engeren Sinne nicht gleichwertig. Es könnte (und gab) Compiler geben, bei denen "alle Bits Null" für bestimmte Typen, wie z. B. Zeiger und Gleitkommawerte, nicht gleich Null ist. Ich bezweifle, dass Sie sich darüber Sorgen machen müssen.