Ich bin verwirrt mit size_t
in C. Ich weiß, dass es von der sizeof
Betreiber. Aber was genau ist er? Ist es ein Datentyp?
Nehmen wir an, ich habe eine for
Schleife:
for(i = 0; i < some_size; i++)
Soll ich die int i;
o size_t i;
?
Ich bin verwirrt mit size_t
in C. Ich weiß, dass es von der sizeof
Betreiber. Aber was genau ist er? Ist es ein Datentyp?
Nehmen wir an, ich habe eine for
Schleife:
for(i = 0; i < some_size; i++)
Soll ich die int i;
o size_t i;
?
Im Allgemeinen sollten Sie, wenn Sie bei 0 beginnen und nach oben gehen, immer einen vorzeichenlosen Typ verwenden, um einen Überlauf zu vermeiden, der Sie in eine negative Wertesituation bringt. Dies ist sehr wichtig, denn wenn die Grenzen Ihres Arrays kleiner sind als der Maximalwert Ihrer Schleife, aber der Maximalwert Ihrer Schleife größer ist als der Maximalwert Ihres Typs, werden Sie einen negativen Überlauf haben und es kann zu einem Segmentierungsfehler (SIGSEGV). Verwenden Sie also im Allgemeinen niemals int für eine Schleife, die bei 0 beginnt und nach oben geht. Verwenden Sie einen unsigned.
größe_t oder ein vorzeichenloser Typ kann als Schleifenvariable verwendet werden, da Schleifenvariablen normalerweise größer oder gleich 0 sind.
Wenn wir eine größe_t Objekts müssen wir sicherstellen, dass in allen Kontexten, in denen es verwendet wird, einschließlich der Arithmetik, nur nicht-negative Werte gewünscht werden. Zum Beispiel würde das folgende Programm definitiv das unerwartete Ergebnis liefern:
// C program to demonstrate that size_t or
// any unsigned int type should be used
// carefully when used in a loop
#include<stdio.h>
int main()
{
const size_t N = 10;
int a[N];
// This is fine
for (size_t n = 0; n < N; ++n)
a[n] = n;
// But reverse cycles are tricky for unsigned
// types as can lead to infinite loop
for (size_t n = N-1; n >= 0; --n)
printf("%d ", a[n]);
}
Output
Infinite loop and then segmentation fault
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.