技术标签: C/C++ 数组指针 数据类型大小 指针数组 无符号类型
数据类型 |
32位 |
64位 |
取值范围(32位) |
char |
1 |
1 |
-128~127 |
unsigned char(当byte使用) |
1 |
1 |
0~255 |
short int /short |
2 |
2 |
–32,768~32,767 |
unsigned short |
2 |
2 |
0~65,535 |
int |
4 |
4 |
-2,147,483,648~2,147,483,647 |
unsigned int |
4 |
4 |
0~4,294,967,295 |
long int /long |
4 |
8 |
–2,147,483,648~2,147,483,647 |
unsigned long |
4 |
8 |
0~4,294,967,295 |
long long int/long long |
8 |
8 |
-9,223,372,036,854,775,808 ~9,223,372,036,854,775,807 |
指针 |
4 |
8 |
|
float |
4 |
4 |
3.4E +/- 38 (7 digits) |
double |
8 |
8 |
1.7E +/- 308 (15 digits) |
注意:
1. 求数组大小时,如果数组作为参数传递时,退化为指针,所以sizeof(arr)大小为该系统下指针的大小
2. 对于C字符串,需要牢记C/C++中一个汉字占两个字节(Linux下3个字节)。
3. 求struct 或者 class 的大小时候,除了基本的数据类型大小,特别要考虑的是字节对齐问题,如果是C++的还涉及虚函数的虚表问题,需要加上虚表指针的大小,关于内存对齐的问题在别的博客会详细写。
关于数组,数组指针,指针数组稍微提一下:
关于sizeof求数组大小的,用代码去gcc中验证了下,说明下:
数组指针,本质是指向数组的指针,不管是指向什么类型,几维数组,sizeof返回的都是指针的大小;
只有正常创建数组 int arr[10],int arr[10][10],这样sizeof(arr)求的是数组的大小,如下图代码中,fun函数中,sizeof(a)的大小为指针的大小,数组作为参数退化为指针。
如下图可以看到,gcc会警告,sizeof只会返回一个int 指针的值
如下图代码中,类似
int(*p)[10]; //p是指向一维数组int [10]的指针
int*p[10]; //p是一维的指针数组,数组的每个元素是指针
结果如下:
这里解释下,因为是 64位系统,所以指针的大小是8,这里a,j 是数组指针,然后d,f分别是一维数组,二维数组的指针,g,h也是,下面解释一波他们的区别。只有b,c是指针数组。
这里我除了输出他们的内存大小,还有指针的值也就是他们指向的地址。
这里可以看到,a,b,c,,d,e,f他们的地址,都是19335XXX,可以看出他们是在一块内存中,这就是局部变量在栈区分配内存的,而g,h是b470XX, 因为malloc是动态分配的,是在堆区分配的,所以是另外一块内存。而且b,c的地址差值是240,差的就是b数组的大小。
顺便提一下,栈区是向下增长的,可以验证下(以下纯属个人兴趣,看不同类型数组在栈区的起始地址):
四个数组的地址是连续的,且b和arr是向下增长的。
在看这里,将最后的二维数组arr2改成一维数组后,arr2的地址是接在arr后面的(同类型是向上增长的),类型不一致后,另外起一段地址,是起低点的地址。
文章浏览阅读2.9k次。术语查看Web页面在线帮助中用到的术语。数字1080i 分辨率为1920×1080的隔行扫描图像格式。 1080p 分辨率为1920×1080的逐行扫描图像格式。 2CIF 分辨率为352×576的逐行扫描图像格式。 2SIF 分辨率为352×480的逐行扫描图像格式。 4CIF 分辨率为704×576的逐行扫描图像格式。 4SIF 分辨率为704×480的逐行扫描图像格式。 720p 分辨率为1_华为会议终端演示会场锁定
文章浏览阅读1.5w次,点赞2次,收藏2次。linux如何查看cuda版本终端输入nvcc -V命令,即可查询到CUDA版本号_linux cuda version
文章浏览阅读4.5k次,点赞5次,收藏45次。3D 目标(pointpillars)识别方案对车辆进行3D的目标识别,经过调研之后,发现autoware 和 apollo等平台均采用pointpillars算法。因此便尝试单纯使用激光雷达数据进行识别。方案实施步骤:理解pointpillars算法模型,并复现。了解自动驾驶数据集KITTI的格式。采集数据并标注。训练与部署。一、理解pointpillars算法模型pointpillars的论文解读可以看这篇论文解析。二、了解KITTI数据的格式因为pointpillars输入的数_pointpillars 小目标
文章浏览阅读853次。OSG粒子系统特效-----雨雪、爆炸、烟雾_粒子特效实现雾
文章浏览阅读2.5k次,点赞2次,收藏15次。数据同步_数据同步
文章浏览阅读5.4w次,点赞36次,收藏238次。目录目录Kafka简介环境介绍术语介绍消费模式下载集群安装配置命令使用JAVA实战参考文献Kafka简介由Scala和Java编写,Kafka是一种高吞吐量的分布式发布订阅消息系统.环境介绍操作系统:centos6.5 kafka:1.0.1 zookeeper:3.4.6术语介绍Broker : Kafka集群包含一个或..._kafka
文章浏览阅读117次。2019独角兽企业重金招聘Python工程师标准>>> ..._f网站
文章浏览阅读159次。零、说明:-----欢迎拍砖1、下面内容是找的网上资料总结的,不是生产环境内容,svn分支策略好麻烦啊2、merge很重要而且不好理解,merge修改的只是本地的工作副本,所以只要不提交,不会对服务端造成影响3、多个项目互相依赖,会不会混乱,版本怎么管理那????一、Trunk,Branches,Tags说明1、Branches、Tags生成都是使用svncopy命令生成..._svn切换分支的底层原理
文章浏览阅读915次。阿里云轻量应用服务器LAMP镜像下搭建网站1.服务器选择我配的是2GB内存1核 40GB SSD系统盘。阿里的云翼计划24岁以下自动获取学生身份,这样购买的话一个月只要9.5元。2.选择应用镜像因为部署的是php项目所以选择的是LAMP应用镜像。3.购买之后,环境都是搭配好的。剩下的就是按照步骤配置MySQL和上传文件。1.解析域名。阿里云解析域名可在此快速添加DNS解析,其他域..._阿里云轻量服务器lamp不用域名怎么建站
文章浏览阅读2次。Makefile学习教程: 跟我一起写 Makefile 0 Makefile概述 0.1 关于程序的编译和链接1 Makefile 介绍 1.1 Makefile的规则1.2 一个示例1.3 make是如何工作的1.4 makefile中使用变量1.5 让make自动推导1.6 另类风格的makefile1.7 清空目标文件的规则2 Makefile 总述 2.1 Makefile里...
文章浏览阅读9.8k次。背景:有一个页面需要被嵌入到另外一个系统中发现嵌入不进去浏览器控制台提示报错:Refused to display 'http://10.45.80.3/portal/iframe.html' in a frame because it set 'X-Frame-Options' to 'sameorigin'.分析:需要嵌入的页面加了跨域的限制解决办法:..._proxy_hide_header x-frame-options;
文章浏览阅读2k次,点赞4次,收藏28次。PaperWeekly 原创 · 作者 |王馨月学校 |四川大学本科生研究方向|自然语言处理Transformer 在自然语言处理、计算机视觉、音频处理等许多人工智能领域都取得了..._分层transformer