首先sizeof是操作符,不是函数
sizeof求变量或者类型或者表达式结果所占内存的字节大小
sizeof()误认为函数
注意
-
sizeof是操作符,不是函数
-
sizeof如果操作数是类型一定得加上()
-
sizeof只关心表达式结果类型,并不会计算表达式
例如 int a = 0;
printf("%d\n",sizeof(++a));
printf("%d\n",a);
输出的结果a = 0,sizeof输出长度为4 -
sizeof(‘a’) 4
char c = ‘a’;
sizeof(c) 1
sizeof(c+‘a’) 4
‘a’ + ‘a’ ===> 结果类型为 int
#include <stdio.h>
2
3 int main(){
4 int a = 10;
5 printf("%d\n",sizeof a);//4
6 printf("%d\n",sizeof 0);//4
7 printf("%d\n",sizeof '\0');//4
8 printf("%d\n",sizeof 'a');//4
9 printf("%d\n",sizeof 3);//4
10 char c = '\0';
11 printf("%d\n",sizeof c);//1
12 c = 'a';
13 printf("%d\n",sizeof c);//1
14 printf("%d\n",sizeof 0ll);//8
15 printf("%d\n",sizeof 3.14);//8
16 printf("%d\n",sizeof 3.14f);//4
17 float f = 3.14;
18 printf("%d\n",sizeof f);//4
19
20 printf("%d\n",sizeof(int));//4
21
22 return 0;
23 }
5. sizeof(expr) expr是一个多类型表达式时,只关系最宽的字节类型
6. sizeof(函数名) 函数名没有小括号 始终为 1
7. sizeof(函数名()) 函数名有小括号 结果等于 函数数返回值类型的字节宽度
#include <stdio.h>
2
3 char geta(){
4 return 'a';
5 }
6 short geth(){
7 return 3;
8 }
9 int main(){
10 int a = 0;
11 printf("%d\n",sizeof(++a));//4 不会计算++a
12 printf("%d\n",a);//0
13
14 char c = '\0';
15 printf("%d\n",sizeof(c));//0
16 printf("%d\n",sizeof(c+'a'));//4
17 //char在进行算术运算时-->int
18 printf("%d\n",sizeof(a+3.14/10));//double
19 printf("%d\n",sizeof(geta));//1
20 printf("%d\n",sizeof(geta()));//1
21 printf("%d\n",sizeof(geth));//1
22 printf("%d\n",sizeof(geth()));//2
23 return 0;
"08sizeof.c" 24L, 482C
- sizeof(指针) 结果为 4 指针 == 内存地址
#include <stdio.h>
2
3 int main(){
4 printf("%d\n",sizeof(int*));
5 printf("%d\n",sizeof(char*));
6 printf("%d\n",sizeof(double**));
7
8 int a = 0;
9 char c = 'a';
10 double d = 3.14;
11 printf("%d\n",sizeof &a);
12 printf("%d\n",sizeof &c);
13 printf("%d\n",sizeof &d);
14
15 return 0;
16 }
可以看到无论是char int double 类型结果都为4