当前位置: 首页 > news >正文

arraylist存放不同数据类型_C++基础知识篇:C++的数据类型

代码编译运行环境:VS2012+Win32+Debug。

1.C++数据类型简介

C++是一种强类型语言。C++程序中的任何变量(或函数)必须遵循“先说明后使用”的原则。定义数据类型有两个方面的作用:一是决定该类型的数据在内存中如何存储,二是决定可对该类型的数据进行哪些合法的运算。


C++的数据类型分为基本数据类型和非基本数据类型。其中非基本数据类型称为复合数据类型或构造数据类型。为了能够体现C++语言和传统C语言在非基本数据类型上的区别,在这里把能够体现面向对象特性的非基本数据类型成为构造函数类型,而将其他非基本数据类型称为复合数据类型。C++的数据类型数据如下图所示:

54470c0a5651ca163df0d3ba1b74d7dc.png

基本数据类型是C++内部预定义的,又叫内置(built-in)数据类型。非基本数据类型则是用户根据需要按照C++语法规则创建的数据类型。在这里,构造数据类型和复合数据类型的区别在于:构造数据类型的实例叫做对象,它是属性和方法的集合。正真的构造数据类型是由C++语言引入的,它体现了面向对象的程序设计思想。构造数据类型的一个显著特征是:在生成该数据类型的一个实例的时候,会自动调用该类型定义的构造函数。也就是说,构造数据类型的变量的初始化工作是由构造函数完成的。

C/C++的学习裙【105+302+9869 】,无论你是小白还是进阶者,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

注意:用基本数据类型定义变量时,类型出现在前面,变量直接跟在类型之后。但是用复合数据类型定义变量时,变量却不一定完全位于类型之后。例如,定义一个数组int a[8],标识符a的数据类型是int[8],但是它出现在数据类型的中间部位。另外,定义或申明变量时,类型外一定不能加括号,例如用这种方式定义一个指针是不对的:(int*)p;,它表示的真实含义是将p转换为int*类型,是强制类型转换的语法形式。

2d0234fa626eeac1a51f62a9b39aa8d0.png

2.宽字符型与单字符型

传统的字符型char是单字节字符型,存储的是该字符的ASCII码,占用一个字节。也可以把char理解成单字节整型,取值范围是-128~127。单字节无符号整数可以用unsigned char表示,取值范围是0-255。VC++中,如果在一个字符串中包含汉字,每个汉字占用2个字节,每个字节的最高位都是1,宽字符占用多少字节与编译器的具体实现有关,以保证能够存储Unicode字符。VC++将wchar_t实现为2个字节,2个字节很显然不能表示所有的Unicode字符,但是通过当前系统的语言环境进行编码转换,两个字节最大能够表示65536个字符,足以表示某个国家的文字。单字节字符是无法容纳一个汉字字符的,如定义char c=’好’;将得到一条编译警告信息,并且只有低字节编码会存放在字符变量c中。C++语言同时支持宽字符类型(wchar_t),用于表示Unicode字符。为了支持Unicode字符的处理,C++在库函数中定义了相应的Unicode字符的处理函数,并将这些函数的申明放在了头文件中。Visual C++中whar_t和char是两种不同的数据类型,它们的存储结构和使用方法都不一样。见如下例子。

f85a9ebe222603567aae9af73d096b8c.png

b31d6dd6f85930f4a64327ef4188146e.png

程序输出结果:

8c4978eb55e06393c03130463596758a.png

阅读以上程序,得出如下结论:

(1)wchar_t和char是不同的数据类型,数据宽度也不一样,sizeof(char)==1,wchar_t的数据宽度与编译器的实现有关,再根据当前系统语言环境进行编码转换,足以保证存储Unicode字符,在Visual C++中 wchar_t占用两个字节。

(2)定义一个wchar_t类型的字符串时,要以L开头,否则出现编译错误。定义一个wchar_t类型的字符常量,也需要以L开头,例如wchar_t wc=L’A’,如果去掉L,编译器会自动执行由char到wchar_t的转换。

(3)对于西文字符(如’A’、’B’、’C’等)来说,在wchar_t类型的变量中,高字节存放的是0x00,低字节存放的是西文字符的ASCII码值。

(4)char类型的字符串以单字节’0’结束,wchar_t类型的字符串以双字节’0’’0’结束。

(5)Windows7中文简体环境中一个汉字占用两个字节,采用的是GBK 编码,所以char类型的字符串中一个汉字占用两个字节表示,这两个字节的最高位都是1,只有这样,才能将它们与西文字符区别开来,所以将它们的ASCII码输出时得到两个负数。在wchar_t类型的字符串中,每个汉字都用双字节表示,采用的是UTF-16编码方式,因此相同的中文字符,存储的码值是不同的。UTF-16编码与ASCII编码不兼容,所以上面的代码中用cout输出L”ABC”无法正常输出。还有就是UTF-16编码将常用的字符采用两个字节进行存储,不常用的汉字采用四个字节存储,因此用wchar_t存储UTF-16编码中四个字节的汉字会产生数据丢失,无法正确存储。

(6)在上面的程序中,语句 cout<<name<<endl; 的输出结果是“张三”,而语句 wcout< <wname< <endl; 却无法正常看到输出。如果字符串wname中全是西文字符,则仍然可以看到输出,这是在控制台程序中的一个现象,与控制台的缺省语言环境的设置有关,即设置采用什么编码方式输出。通过setlocale来设置语言环境后,进行编码转换,见程序中的代码。

相关文章:

  • oracle 两行数据合并成一行_oracle10g 多行数据合并为一行 | 学步园
  • idea创建包怎么让包分层_ROS基础-创建工作空间和功能包
  • python更改当前路径_类中python中的当前目录路径已更改
  • 德卡t10社保卡类型_德卡T10型多合一读写器通过社保检测
  • qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)
  • icmp回复报文_UDP/IP硬件协议栈设计(六):ICMP
  • druid监控页面 关闭_springboot开启druid连接池的监控|教程
  • 开环传递函数判断系统类型_第七章-离散系统(1-20)
  • 5脚12v继电器接线图解_门禁系统现场接线图,简单易懂,喜欢学习的不要错过...
  • 平行相似定理_初中数学相似模型合集解析——A及8字模型
  • 广东科技学院专插本c语言考卷_29个专业!广东科技学院2021年专升本招生专业公布...
  • 物理搬砖问题_DNF:红眼搬砖格蓝迪攻略,新人必看
  • python双向链表 du_python实现双向链表
  • python 计算两个经纬度的距离_使用经纬度和海拔(高程)计算两点之间的距离...
  • 前端实现原理_Web 前端路由原理解析和实现
  • [译]前端离线指南(上)
  • 「译」Node.js Streams 基础
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android优雅地处理按钮重复点击
  • Angular数据绑定机制
  • CSS 提示工具(Tooltip)
  • ES6之路之模块详解
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • java小心机(3)| 浅析finalize()
  • Laravel Telescope:优雅的应用调试工具
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue 重置组件到初始状态
  • Vue2.0 实现互斥
  • webpack+react项目初体验——记录我的webpack环境配置
  • 高性能JavaScript阅读简记(三)
  • 简析gRPC client 连接管理
  • 将 Measurements 和 Units 应用到物理学
  • 聊一聊前端的监控
  • 前端自动化解决方案
  • 如何学习JavaEE,项目又该如何做?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 用mpvue开发微信小程序
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 整理一些计算机基础知识!
  • ​520就是要宠粉,你的心头书我买单
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​决定德拉瓦州地区版图的关键历史事件
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (汇总)os模块以及shutil模块对文件的操作
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (学习日记)2024.01.19
  • (转)3D模板阴影原理
  • (转)winform之ListView
  • (转)母版页和相对路径
  • ***原理与防范
  • .Net CoreRabbitMQ消息存储可靠机制