【C语言】究竟malloc前面和sizeof里面的值到底为什么这么填?(int*)malloc(sizeof(int))

   相信很多人有这样的疑问,我们在给指针分配空间的时候常常使用这样的语句:

int *p =  (int*)malloc(sizeof(int));

为什么要在malloc前加上*在sizeof里面不加呢?

我们先来看一下关于malloc的介绍

malloc的全称是memory allocation,
中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型
返回分配的内存区域地址,
当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的
分配内存,且分配的大小就是程序要求的大小

有一点值得注意,malloc这个函数的返回值为void*,而我们上面p定义的变量类型为int*,所以需要进行强制转化,所以使用(int*)。

  然后我们可以明确的是我们要申请一块int这么大的内存空间,再使得p指向这个空间,所以很明确的是sizeof(int)这么写是没有问题的。如果写sizeof(int*),就会申请int*这么大的一块空间。如果你的运行结果没有错,证明机器中int所占的空间大小和int指针型所占的空间大小是相同的。但是你分配char和结构体指针就不会这么幸运了。我们来看一组实验

语法sizeof(xx)=?xx占多少字节
(int *)malloc(sizeof(int))sizeof(int)=4int占4个字节
(int *)malloc(sizeof(int*))sizeof(int*)=4int指针占4个字节
(char *)malloc(sizeof(char))sizeof(char)=1char占1个字节
(char *)malloc(sizeof(char*))sizeof(char*)=4int占4个字节

如果看完了这篇觉得内容比较浅,想了解更多关于sizeof的内容,可以看一下我的C++学习笔记这章第九点关于sizeof运算符的详细介绍:
《C++primer学习笔记》——第4章 表达式
仔细看过这个表相信大家应该就明白了吧。如有问题欢迎留言~如果觉得有帮助,点个赞和关注~
.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值