相信很多人有这样的疑问,我们在给指针分配空间的时候常常使用这样的语句:
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)=4 | int占4个字节 |
(int *)malloc(sizeof(int*)) | sizeof(int*)=4 | int指针占4个字节 |
(char *)malloc(sizeof(char)) | sizeof(char)=1 | char占1个字节 |
(char *)malloc(sizeof(char*)) | sizeof(char*)=4 | int占4个字节 |
如果看完了这篇觉得内容比较浅,想了解更多关于sizeof的内容,可以看一下我的C++学习笔记这章第九点关于sizeof运算符的详细介绍:
《C++primer学习笔记》——第4章 表达式
仔细看过这个表相信大家应该就明白了吧。如有问题欢迎留言~如果觉得有帮助,点个赞和关注~
.