C语言里面的sizeof和malloc反向认识

1.环境

windows10 64位
MinGW64

2.几种类型的sizeof计算的大小

2.1代码

#include <stdio.h>
#include <stdlib.h>
int main()
{

    printf("sizeof(char)=%d\tsizeof(char*)=%d\n", sizeof(char), sizeof(char *));
    printf("sizeof(int)=%d\tsizeof(int*)=%d\n", sizeof(int), sizeof(int *));
    printf("sizeof(double)=%d\tsizeof(double*)=%d\n", sizeof(double), sizeof(double *));

    return 0;
}

2.2输出结果

在这里插入图片描述

可以发现:
1char int double 各个的sizeof占据的内存字节各个不同,例如int4个字节
2、而int * char * 等指针类型的都是  8个字节

2.3问题 int a[],这里的这个a呐

我们知道  int  a[],这里的a就是一个指针,那这个指针的大小是不是我们和上述一样呐?

2.3.1 代码

#include <stdio.h>
#include <stdlib.h>
int main()
{

    int a[6] = {3};
    printf("%d", sizeof(a));

    return 0;
}

2.3.2 输出结果

在这里插入图片描述

2.3.3 分析与结论

这里看到,啊这个a不是上面的那种 8 
解释:应该是这种a不可修改了,是特殊的方式,具体还得看别人的
简单理解就是知道,这种就是  6*4=24个字节了。

3.malloc();动态分配大小

3.0 对malloc()函数的用法解释

# include <stdlib.c>   //需要引入这个lib库
 int *a = (int *)malloc(n*sizeof(int));   //动态分配
    //对这个指针当作数组的哪个变量使用  --a[i]这样用
free(a)   //释放(必须)

3.1代码

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n;
    scanf("%d", &n);
    //C99语法
    int a[n];
    printf("sizeof(a)=%d\n", sizeof(a));
    //动态分配
    int *b = (int *)malloc(n * sizeof(int));
    printf("sizeof(b)=%d\n", sizeof(b));
    printf("sizeof(*b)=%d\n", sizeof(*b));
//释放
    free(b);

    return 0;
}

3.2输出结果

在这里插入图片描述

3.3 分析理解

仔细看这里的sizeof(b)  -->这里的b就是指针类型的所以大小就是8,
并不是那个5*4,但是这里的b可以这样  b[23]=123;这样当成指针使用
sizeof(*b)这其实就是那个int类型的,所以是4

时间有限下课

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值