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;
}