sizeof() 他是運算符, 而不是函數。不能被表象所迷惑,雖然他有一個括號,但是他確實不是函數。
他可以用於求各種變量,函數等所有可以表示出來的東西的長度。
例如:
void fun() {}
這個也是被允許的, 求出來的結果是1 。
寫這些主要是加深對sizeof() 的記憶力。在現在的公司招聘中,sizeof() 已經開始佔據着一種很重要的位置。
很多公司都樂此不彼的出一些sizeof() 相關的題來考考應聘者。
其中以下是常見的幾種示例。這裏以代碼的形式表現出來:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double fun()
{
printf("hello world...");
return 0;
}
void fun1(char s[])
{
printf("sizeof(s) = %d\n",sizeof(s));
}
int main()
{
printf("\n********************************************************\n");
// 出現的概率最高
char a[] = "abcdef";
char aa[10] = "abcdef";
printf("sizeof(a) = %d\tsizeof(aa) = %d\n", sizeof(a), sizeof(aa));
printf("strlen(aa) = %d\n", strlen(aa));
printf("\n********************************************************\n");
// 深入點,必考
char *p = a;
printf("sizeof(*p) = %d\tsizeof(p) = %d\n", sizeof(*p), sizeof(p));
// 對上面進行鞏固,int 跟char 是一樣的
int b[10];
printf("%d\n", sizeof(b));
printf("\n********************************************************\n");
// sizeof 對函數也是通殺
printf("sizeof(fun) = %d\n", sizeof(fun)); // 1 這個很有意思(還不明瞭)
printf("&fun = %p\n", fun);
printf("sizeof(fun()) = %d\n", sizeof(fun())); // 8 這個也很有意思(這個是返回值的長度)
printf("\n********************************************************\n");
// 指針的時候情況又是怎樣呢?
char *str1 = "abcde";
char str2[10]="abc";
char *q = malloc(100);
printf("sizeof(q) = %d\n", sizeof(q));
printf("sizeof(str1) = %d\n", sizeof(str1)); // sizeof 包含'\0'
printf("strlen(str1) = %d\n", strlen(str1)); // strlen 不包含'\0'
printf("sizeof(str2) = %d\n", sizeof(str2));
printf("sizeof(\"abc\") = %d\n", sizeof("abc"));
printf("\n********************************************************\n");
// 調用函數中會將數組轉換爲指針,故而是4
fun1(a);
return 0;
}