C++数据类型
创始人
2025-06-01 05:20:34

目录

C++基础数据类型

指针

指针类型

指针赋值

引用


参考:《深入理解Android:JAVA 虚拟机ART》

C++基础数据类型

包括:int,short,long,long long,bool,char,float和double

由于C++和硬件平台关联较大,规范没办法像Java那样严格规定每种数据类型所需的字节数,所以它只定义了每种数据类型最少需要多少字节。

C++定义了sizeof操作符,通过这个操作符可以得到每种数据类型(或某个变量)占据的字节个数

 //整型,sizeof(int):至少2个字节int i = 0,j={1},k{123};  //三种赋值方式cout << "整型,长度=" << sizeof(int) << endl;cout << "i= " << i << " j= " << j << " k= " << k << endl;//短整型,sizeof(short)至少2个字节short ashort = 0xab;cout << "短整型,长度=" << sizeof(short) << " " << ashort << endl;//长整型,sizeof(long):至少4个字节long along = 1234;cout << "长整型,长度=" << sizeof(long) << " " << along << endl;//长整型,sizeof(long long):至少8个字节long long alonglong = 0xffffffff00000000;cout << "长整型,长度=" << sizeof(long long) << " " << alonglong << endl;//布尔型,sizeof(bool):规范未定义bool abool = false; //truecout << "布尔型,长度=" << sizeof(bool) << " " << abool << endl;//字符型,sizeof(char):至少1个字节char achar = 'x';cout << "字符型,长度=" << sizeof(char) << " " << achar << endl;//单精度浮点。对于浮点数,规范只定义了浮点数最少支持多少个有效数字float afloat = 1.2345678910;cout << "单精度浮点,长度=" << sizeof(float) << " " << afloat << endl;//双精度浮点。规范定义float是6个有效数字,double至少有10个有效数字double adouble = 1.23456789;cout<

C++中除bool和浮点数之外,其他基本数据类型还可细分为符号和有符号两种

//无符号类型由unsigned xxx来修饰,比如:
unsigned int aunint = 0xffffffff;
unsigned short aunshort = 0x1fff;
unsigned char aunchar = 0xff;

指针

//指针,由"类型 *" 定义。

int *pint = &i;  //&i表示取某个变量的地址,由&取地址符号表达
int &aliasOfJ = j; //引用,由"类型 &"定义
cout<<"i的内存地址为"<

指针本质上代表了虚拟内存的地址。简单点说,指针就是内存地址。比如,在32位系统上,一个进程的虚拟地址空间为4G,虚拟内存地址从0x0到0xFFFFFFFF,这个段中的任何一个值都是内存地址。

指针类型

int *p,变量p是一个指针,它指向的内存存储了一个(对于数组而言,就是一组)int型数据

short *p,变量p指向的内存存储了一个(或一组)short型数据

int (*p)(int argc,char* argv[]),变量p指向一个返回值为int 参数为int 和char*的函数入口地址

int mymain(int argc,char*argv[]){//pmain是一个函数指针变量。注意它的格式,它和目标函数(mymain)的参数和返回值类型//完全匹配int (*pmain)(int argc,char* argv[]);pmain = mymain;//pmain指向了mymain函数pmain = &mymain;//取mymain函数的地址给pmain变量,效果和上面一种方法一样pmain(0,nullptr);//调用pmain函数,其实就是调用mymain函数
}

指针赋值

//指针型变量的赋值
int* px = (int*)0x123456;//给px任意设置一个值
int* py = new int;//从堆上分配一块内存,内存地址存储在py中
long z = 100;
long* pz = &z;//通过取地址符号&,将z的地址赋值给pz
//函数指针变量的赋值
int (*pmain)(int argc,char* argv[]);
pmain = mymain;//效果和下条语句一样,将mymain函数地址赋值给pmain变量
pmain = &mymain;

指针的解引用

指针只是代表内存的某个地址,通过  解指针引用符号*  获取该地址对应内存中的内容

//指针解引用,获取对应内存地址中的值
(*py)=1000;
long zz = (*py) + 123;
//函数指针解引用,意味着要调用对应的函数
pmain(100,nullptr);
(*pmain)( 100,nullptr);

引用

引用只是变量的别名。由于是别名,所以C++要求在定义引用型变量时就必须将它和实际变量绑定。·引用型变量绑定实际变量之后,这两个变量(原变量和它的引用变量)其实就代表同一个东西了。代码注释中以鲁迅为例,“鲁迅”和“周树人”都是同一个人。

void testPointersAndReference(){/*下面4条语句为指针的操作(1)px开始指向x的地址,(2)然后我们使它指向y的地址指针的取值很随意,可以任意赋地址值,只要类型匹配。*/int x = 12345;int *px = &x; //px指针指向x的地址int y = 2222;px = &y; //修改px指针,使它指向y的地址/*下面是引用操作,引用和指针有很大不同:(1)引用在定义的时候就必须和某个变量绑定。通俗点说,引用是一个变量的别名。(2)如果定义时不绑定某个变量,编译报错。(3)绑定后,引用和原变量实际是一个东西。就好像鲁迅其实是周树人的笔名一样,周树人是鲁迅,鲁迅就是周树人。鲁迅身上发生的任何事情,就是周树人身上发生的事情*/int &aliasX = x;//定义引用aliasX,这个引用和x关联.//设置aliasX的值为54321.那么,x的值也变成54321.//x就是aliasX,aliasX就是x.aliasX = 54321;changeRef(aliasX);//该函数返回后,x值变成9999//int &aliasY; //编译错误,引用定义时必须和一个变量绑定
}
/*引用的作用之一体现在函数调用上。函数形参如果定义为引用,则函数内部修改了形参的值,实参也会相应发生修改。比如下面代码中的三个函数的区别:(1)changeRef:由于alias为引用,不是指针,所以可直接操作alias(2)changeNoRef:x不是引用。函数内部修改其值为9999,函数返回后不影响实参(3)changePointers:通过指针来修改实参的值为9999,但是每次操作指针类型的数据都得用*号。不如1方便
*/
void changeRef(int & alias){//修改形参的值为9999,该函数返回后,实参的值就变成了9999alias = 9999;
}
void changeNoRef(int x){//修改形参的值为9999,但该函数返回后,实参并不受任何影响x = 9999;
}
void changePointers(int* pInt){//也能通过修改形参的值来修改实参的值为9999,但是,操作形参时,必须使用解指针引用符号**pInt = 9999;
}

字符和字符串

char iamchar = 'c';//字符常量
cout<<"iamchar="<

数组

//定义数组,数组的长度由初值个数决定
int intarray[] = {1,2,3,4,5};
cout<<"array size = " << sizeof(intarray)/sizeof(intarray[0]) <

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...