探索sizeof的这些事

首先sizeof是操作符,不是函数

sizeof求变量或者类型或者表达式结果所占内存的字节大小

sizeof()误认为函数

注意

  1. sizeof是操作符,不是函数

  2. sizeof如果操作数是类型一定得加上()

  3. sizeof只关心表达式结果类型,并不会计算表达式
    例如 int a = 0;
    printf("%d\n",sizeof(++a));
    printf("%d\n",a);
    输出的结果a = 0,sizeof输出长度为4

  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   

在这里插入图片描述

  1. 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值