請考慮以下聲明:爲什麼str [5],str [] =「1234」和str = malloc(5)具有不同的大小?
char str1[5];
char str2[] = "1234";
char *str3 = malloc(sizeof(char) * 5);
每個str
的大小印刷:
printf("str1 has size %ld\n", sizeof(str1));
printf("str2 has size %ld\n", sizeof(str2));
printf("str3 has size %ld\n", sizeof(str3));
輸出是:
str1 has size 5
str2 has size 5
str3 has size 8
我已經理解的是,指針的大小是8個字節。在這3種情況下,str
是一個指針,而*str
對應於字符串str
的第一個字符:在這3種情況下,其大小爲1個字節,其大小爲char
。
如果我讓程序使用char str[] = "1234"
或char str[5];
向str
分配5個字節的內存,則str
的大小爲5個字節。但是當我分配5個字節到char *str
與malloc
時,str
的大小仍然是8個字節,這是一個指針的大小。我預計str3
的大小對應於我用malloc
分配給它的內存量。
爲什麼我錯了?
因爲前兩個是五個'char's陣列的,而最後一個是一個指針。無論你分配給'str3','sizeof'的結果都不會改變。 – dasblinkenlight
'sizeof'不會告訴你數據的大小;只是* type *的大小。 'sizeof char [5]'是'5'。 'sizeof char [100]'是100.'sizeof char *'總是8(在你的機器上); – RPGillespie