sizeof()於strlen()函數的區別

1、在一些面試或者閱讀代碼時經常遇到這兩個函數,下面介紹我對這兩個的理解,同時驗證也是正確的,

sizeof()不是一個函數,是一個關鍵字,strlen()是一個函數,

strlen()測得是一個字符串的長度,就是實際存放的幾個字符,不包括結束符 ‘\0’,

sizeof()測得是一個類型的大小,但對指針測得長度是4,也就是說:只要是指針變量測得長度都是4,


下面來看一段代碼:

int  main( int agc, char argv[ ])

{

char buf [20] ="abcdf";

char buffer [40] ="";

char *p=buf ;

printf("sizeof_buf=%d\n" ,sizeof(buf));  //這裏buf代表的是buf數組存放了20個大小的的char型,所以其結果爲20,

printf("sizeof_*p=%d\n" , sizeof(p) );  //這裏測得是指針變量類型的長度,其結果爲4

printf("strlen_buf=%d\n", strlen(buf)); //也是測字符串長度,其結果爲5

printf("strlen_*p=%d\n",strlen(p));  //這裏也是測得字符串長度,所以結果爲5

printf("strlen=%d\n",strlen(buffer));  //這裏buffer初始值爲0,所以測字符串長度是0

printf("sizeof=%d\n",sizeof(buffer));  //在這裏buffer裏面存放的是40個char型的變量,所以輸出結果是40

}



2、計算內存容量:

用運算符sizeof 可以計算出數組的容量(字節數)。如下的第一段代碼,sizeof(a)的值是12(注意別忘記了‘\0’)。指針p指向a,但是sizeof(p)的值卻是4.這是因爲sizeof(p)得到的是一個指針變量的字節數,相當於sizeof(char *) ,而不是p所指向的內存容量。C++/C語言沒有辦法知道指針所指的內存容量,除非在申請內存時記住它。

注意當數組做爲函數的參數進行傳遞時,該數組自動退化爲同類型的指針。示例第二段代碼中。不論數組a的容量是多少,sizeof(a)始終等於sizeof(char *)。

第一段代碼:

char a[] = "hello world";

char *p = a;

cout<< sizeof(a) << endl;      //12字節

cout<< sizeof(p) << endl;     //4字節


第二段代碼(數組退化爲指針):

void Func(char a[100] )

{

cout<< sizeof(a) <<endl;    //4字節而不是100字節

}



華三的關於sizeof測試題和答案

1、

char *str="abcde";

char *p=str;

printf("%d\n",sizeof(p));    //4

printf("%d\n",sizeof(*p));   //1

printf("%d\n",sizeof(str));  //4

printf("%d\n",sizeof("abcde"));    //6















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章