我已經將緩衝區設置爲大小100. 我在聲明緩衝區的主函數中顯示緩衝區。但是,當我將緩衝區傳遞給函數並獲取sizeof'4'時,我認爲它應該是100,因爲這是我在主要版本中創建的緩衝區的大小。 輸出: 緩衝區大小:100 的sizeof(緩衝液):4將char緩衝區傳遞給函數並獲取緩衝區的大小
#include <string.h>
#include <stdio.h>
void load_buffer(char *buffer);
int main()
{
char buffer[100];
printf("buffer size: %d\n", sizeof(buffer));
load_buffer(buffer);
return 0;
}
void load_buffer(char *buffer)
{
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
在main()中顯式聲明瞭一個數組,而在load_buffer()中聲明瞭一個指針。不同之處在於,在main()中,編譯器知道緩衝區是一個數組,但是在load_buffer()中,編譯器不知道緩衝區是來自數組,還是堆中分配的內存和結構或其他。編譯器只知道內存地址(因此是一個指針),所以sizeof()返回內存地址的大小,它的長度是4個字節(因爲它是一個32位的機器,如果它是一個64位的機器,它將是8字節長)。希望這有助於理解更多。 – AndaluZ 2014-04-01 12:15:53
而不是sizeof()函數,使用strlen(),然後它返回指針值的大小。 – NandhaKumar 2018-01-05 06:18:47