[C++基础学习]----01-C++数据类型详解

前言

        C++是一种静态类型的编程语言,它提供了丰富的数据类型来存储和操作数据。这些数据类型为C++程序员提供了丰富的选择,可以根据具体需求来选择最合适的类型来存储和操作数据。下面详细解释一些常见的C++数据类型,包括其原理和使用方法:

正文

01-数据类型简介

        整数类型(int、short、long、long long):

        a、这些类型用于表示整数,其范围和精度根据具体的类型而定。

        b、原理:整数类型通常使用固定的位数来表示整数,可以是有符号或无符号的。

        c、使用方法:int通常是默认的整数类型,但你可以根据需求选择更适合的类型。

        浮点数类型(float、double、long double):

        a、用于表示带有小数部分的数值,精度和范围随类型而异。

        b、原理:浮点数采用IEEE 754标准表示,分为单精度(float)、双精度(double)和扩展精度(long double)。

        c、使用方法:double通常是默认的浮点数类型,提供较高的精度,但会占用更多的内存。

        数组(Array):

        a、用于存储具有相同数据类型的元素的集合。

        b、原理:数组在内存中是一块连续的存储区域,元素通过索引进行访问。

        c、使用方法:声明数组时指定元素类型和大小,可以使用下标访问元素。

        结构体(struct):

        a、允许将不同类型的数据组合在一起,形成一个自定义的数据类型。

        b、原理:结构体将多个数据字段打包成一个单独的对象。

        c、使用方法:定义结构体并声明其成员变量,可以通过成员运算符.访问成员变量。

        类(class):

        a、类似于结构体,但可以包含成员函数,从而实现面向对象编程。

        b、原理:类将数据和操作数据的函数打包在一起,提供了封装、继承和多态等特性。

        c、使用方法:定义类及其成员函数,可以通过对象来调用成员函数。

        指针(Pointer):

        a、存储内存地址的变量,用于间接访问内存中的数据。

        b、原理:指针变量存储了一个内存地址,可以通过解引用操作符*来访问该地址处的值。

        c、使用方法:声明指针时需要指定指向的数据类型,可以使用new来动态分配内存,使用delete释放内存。

        引用(Reference):

        a、变量的别名,允许对同一内存位置的不同名称进行访问。

        b、原理:引用实际上是一个已存在变量的别名,不占用额外的内存空间。

        c、使用方法:在定义时使用&符号声明引用,之后可以直接使用引用来操作原始变量。

02-整型

        #include <iostream>表示:头文件,给予使用部分功能的权限 用于存储iostream类库的 源文件 ,在这个程序中用于提供输出这项功能。C++/C++11中头文件iostream定义了标准输入/输出流对象。包含了iostream也自动包含了ios、streambuf、istream、ostream和iosfwd。
        using namespace std; 表示:namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。

#include <iostream>
using namespace std;


void main() {
// 用void替换int,这样能少打一个return 

	//1、短整型 数据范围(-32768~32767)
	short num1 = 10;
	//2、整型
	int num2 = 10;
	//3、长整型
	long num3 = 10;
	//4、长长整型
	long long num4 = 10;
	
	cout << "num1 = " << num1 << endl;
	cout << "num2 = " << num2 << endl;
	cout << "num3 = " << num3 << endl;
	cout << "num4 = " << num4 << endl;
	system("pause");


}
03-实型

        实型(也叫浮点型)用于表示小数,因为程序中并不一定都是整数,还有小数。具体代码和解释如下:

#include<iostream>
using namespace std;

int main()
{
	
	//1、单精度   float  有效数字范围为7位      有效数字统计时,也会统计小数点前面的数字
	//2、双精度   double 有效数字范围为15~16位 
	//默认情况下,输出一个小数,会显示出6位有效数字

	float f1 = 3.1415926f;//初始值后加字母f是因为不加字母时系统默认为双精度
	cout << "f1 = " << f1 << endl;

	double d1 = 3.1415926;

	cout << "d1 = " << d1 << endl;

	//统计float和double占用的内存空间
	cout << "float 占用的内存空间为:" << sizeof(f1) << endl;

	cout << "double 占用的内存空间为:" << sizeof(d1) << endl;

	//也可以用科学计数法表示小数,不常用,主要用于明白别人写的代码是什么意思
	float f2 = 3e2; //当e之后跟的是正整数时,它表示 3 * 10 ^ 2
	cout << " f2 = " << f2 << endl;

	float f3 = 3e-2;//当e之后跟的是负整数时,它表示 3 * 0.1 ^ 2
	cout << "f3 = " << f3 << endl;
	system("pause");
	return 0;

}
04-字符型

        字符型变量用于显示单个字符 :       

        1、在显示变量时,用单引号将字符括起来,不能用双引号

        2、单引号只能有一个字符,不能是字符串

        3、C和C++中字符型变量只占用1个字节

        4、字符型变量并不是把字符本身存储到内存中,而是将对应的ASCII编码放入存储单元

#include <iostream>
using namespace std;

int main() {

	
	// 掌握以下四点
	// 1、字符型变量创建方式
	char ch = 'b';
	cout << ch << endl;

	//2、字符型变量所占内存大小
	cout << "char字符型变量所占内存:" << sizeof(char) << endl;

	//3、字符型变量常见错误
	//char ch2 = "b"; // 创建字符型变量必须用单引号
	//char ch2 = 'abcde';//单引号中只能由一个字符

	//4、字符型变量对应ASCII编码
	// "(int)ch"命令可以将ASCII码强制转为10进制数,A-Z对应65-90,a-z对应97-122
	cout << (int)ch << endl;

	system("pause");
	return 0;
}
05-字符串型
#include <iostream>
using namespace std;
#include <string>
int main()
{
	//1、C风格的字符串
	//注意:char 字符串名(即str)后要加[],等号后面要用双引号包含起来字符串。
	char str[] = "hello world";//str代表字符串的变量
	cout << str << endl;//这里指将字符串变量输出,注意str不可加双引号

	//2、C++风格字符串
	string str2 = "hello";
	cout << str2 << endl;//但是现在不能输出,还需要加一个头文件#include<string>

	system("pause");

	return 0;

}
06-sizeof关键字

        sizeof 是 C/C++ 中的一个运算符,用于获取数据类型或变量在内存中占用的字节数。它的作用和原理如下:

        获取数据类型大小: 你可以使用 sizeof 来获取任意数据类型的大小,包括基本数据类型、结构体、类等。

        获取变量大小: 除了数据类型外,你还可以用 sizeof 来获取变量在内存中所占的空间大小。

        编译时计算: sizeof 是在编译时计算的,而不是在运行时。编译器在编译时就知道每种数据类型或变量所占用的内存空间大小。

        以字节为单位: sizeof 返回的是以字节为单位的大小,一个字节通常由8位组成。

        不同平台可能不同: 数据类型的大小在不同的编译器和不同的平台上可能会有所不同,但通常遵循一定的规则和标准。

        对于数组的处理: 对于数组,sizeof 返回整个数组所占用的空间大小,而不是数组的指针大小。

        对于指针的处理: 对于指针,sizeof 返回指针本身所占用的空间大小,而不是指针指向的对象所占用的空间大小。

        不对表达式求值: 在使用 sizeof 时,不会对表达式进行求值,只是计算表达式所表示的类型或变量的大小。

#include<iostream>
using namespace std;

int main()
{
	//整型:short(2指占的内存大小)  int(4)  long(4)   long long(8)
	//可以利用sizeof求出数据类型占用内存的大小
	//语法:(就是书写方式)sizeof (数据类型 / 变量)

	//例如:
	short num1 = 10;
	cout << "short占用的内存空间为:" << sizeof(num1) << endl;
	//注:sizeof后写数据类型(short)或者变量(num1)都可以输出占用的内存空间
	int num2 = 10;
	cout << "int占用的内存空间为:" << sizeof(int) << endl;

	long num3 = 10;
	cout << "long占用的内存空间为:" << sizeof(num3) << endl;

	long long num4 = 10;
	cout << "long long占用的内存空间为:" << sizeof(long long) << endl;


	system("pause");

	return 0;

}
 07-转义字符

        使用方法和原理解释如下:

#include <iostream>
using namespace std;

int main() {
	// 转义字符用于一些不能显示出来的ASCII字符
	/* 主要用到以下三个字符
	   1、\n 用于换行
	   2、\t 用于水平制表
	   3、\\ 代表一个反斜线字符"\"
	*/
	// 1、\n 用于换行
	cout << "hello world\n";

	//2、\t 用于水平制表 作用就是可以整齐输出数据
	cout << "aaa\thelloworld" << endl;
	cout << "aaaaa\thelloworld" << endl;
	cout << "aaaaaaa\thelloworld" << endl;

	// 3、\\ 代表一个反斜线字符"\"
	cout << "\\" << endl; // 必须是双引号

	system("pause");
	return 0;
}
08-转义字符

        使用方法和原理解释以及运行结果如下:

#include<iostream>
using namespace std;
#include <string>
int main() {

	// 数据输入
	// 1、整型
// 	int a = 0;
// 	cout << "请给整型变量a赋值:" << endl;
// 	cin >> a;
// 	cout << "整型变量a = " << a << endl;
	// 2、浮点型
// 	float f = 3.14f;
// 	cout << "请给浮点型f变量赋值:" << endl;
// 	cin >> f;
// 	cout << "浮点型变量f = " << f << endl;
// 	// 3、字符型
// 	char ch = 'a';  //字符用单引号表示
// 	cout << "请给字符型ch变量赋值:" << endl;
// 	cin >> ch;
// 	cout << "字符型变量ch = " << ch << endl;
	// 3、字符串型
// 	string str = "abc";  // 字符串用双引号表示
// 	cout << "请给字符型str变量赋值:" << endl;
// 	cin >> str;
// 	cout << "字符型变量str = " << str << endl;
	// 3、布尔类型
	bool flag = true;
	cout << "请给布尔类型flag变量赋值:" << endl;
	cin >> flag;
	cout << "布尔类型变量flag = " << flag << endl;


	system("pause");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/581087.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VBA技术资料MF146:发出多次Beep提示声

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Day20.一刷数据结构算法(C语言版) 669修剪二叉搜索树;108将有序数组转换为二叉搜索树;538把二叉搜索树转换为累加树

一、669修剪二叉搜索树 这道题目比较难&#xff0c;比添加增加和删除节点难的多&#xff0c;建议先看视频理解。 题目链接&#xff1a;修剪二叉搜索树 文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a; 你修剪的方式不对&#xff0c;我来给你纠正一下&#xff01;| 修剪二…

AI预测体彩排列3第2套算法实战化测试第6弹2024年4月28日第6次测试

今天继续进行新算法的测试&#xff0c;今天是第6次测试。好了&#xff0c;废话不多说了&#xff0c;直接上图上结果。 2024年4月28日体彩排3预测结果 6码定位方案如下&#xff1a; 百位&#xff1a;3、2、1、0、5、6、7 十位&#xff1a;3、5、6、2、1、0 个位&#xff1a;3、4…

iOS - 多线程-atomic

文章目录 iOS - 多线程-atomic1. 源码分析1.1 get方法1.2 set方法 2. 一般不使用atomic的原因 iOS - 多线程-atomic atomic用于保证属性setter、getter的原子性操作&#xff0c;相当于在getter和setter内部加了线程同步的锁可以参考源码objc4的objc-accessors.mm它并不能保证使…

【无监督+自然语言】 GPT,BERT, GPT-2,GPT-3 生成式预训练模型方法概述 (Generative Pre-Traning)

主要参考 【GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【李沐论文精读】-2022.03.04】 https://www.bilibili.com/video/BV1AF411b7xQ/ 大语言模型综述&#xff1a; https://blog.csdn.net/imwaters/article/details/137019747 GPT与chatgpt的关系 图源&#xff1a;L…

【Verilog-语法】 条件编译 `ifdef/`ifndef

一、前言 在Verilog项目开发过程中某功能是&#xff0c;一部分代码可能有时候用&#xff0c;有时候不用&#xff0c;为了避免全部编译占用资源&#xff0c;可以使用条件编译语句&#xff1b;尤其在大型项目中还可以节约大量的时间。 二、语法 语法书写格式&#xff1a; &am…

嵌入式Linux学习——Linux常用命令(下)

压缩/解压缩命令 gzip gzip 的常用选项&#xff1a; -l(list) 列出压缩文件的内容。-k(keep) 在压缩或解压时&#xff0c;保留输入文件。-d(decompress) 将压缩文件进行解压缩。 注意&#xff1a; 如果 gzip 不加任何选项&#xff0c;此时为压缩。 压缩完该文件会生成后缀…

web自动化系列-selenium的基本方法介绍

web自动化 &#xff0c;一个老生常谈的话题 &#xff0c;很多人的自动化之路就是从它开始 。它学起来简单 &#xff0c;但做起来又比较难以驾驭 &#xff1b;它的执行效率慢 、但又是最接近于用户的操作场景 &#xff1b; 1.web自动化中的三大亮点技术 我们先聊聊 &#xff0…

hive安装

文章目录 1、下载hive2、安装hadoop&#xff08;略&#xff09;3、安装mysql&#xff08;略&#xff09;4、安装 1、下载hive https://dlcdn.apache.org/hive/hive-3.1.3/ 2、安装hadoop&#xff08;略&#xff09; 3、安装mysql&#xff08;略&#xff09; 4、安装 解压 …

(十一)Servlet教程——Request请求转发

1.Web应用在处理客户端的请求的时候&#xff0c;一般的时候都需要多个资源协同处理&#xff0c;比如先经过一个Servlet的处理&#xff0c;然后再经过另外一个Servlet的处理。但是在一个Servlet中又不能直接调用另外一个Servlet的service方法&#xff0c;所以Servlet就提供了请求…

【嵌入式软件】LWIP 以太网通信

1.互联网模型 1.1 OSI&#xff08;Open System Interconnection&#xff09;七层模型 1&#xff09;应用层&#xff1a; 为上层用户提供应用的接口。常用的应用层的网络协议有&#xff1a;HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP 2&#xff09;表示层&…

【C++】C\C++内存管理

下面是围绕C\C内存管理这一块知识谈论相关的内存管理机制&#xff0c;有需要借鉴即可。 同时&#xff0c;我在下面也放了快速建立链表的模板&#xff0c;方便oj题目拿到vs上进行调试。 内存管理目录 1.CPP内存管理1.1new、delete关键字概念1.2特性1.3总结 2.new、delete的底层…

【C语言】贪吃蛇详解(附源码)

一、贪吃蛇实现效果 【C语言】贪吃蛇&#xff08;控制台&#xff09; 二、源码 &#x1f388;&#x1f388;&#x1f388;Snake 残风也想永存/C语言项目 - 码云 - 开源中国 (gitee.com)&#x1f388;&#x1f388;&#x1f388; 三、如何使用C语言去实现一个贪吃蛇&#xff1f…

每日一题:地下城游戏

恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0…

ThreeJs 环境配置及遇到问题的解决方法

一、环境搭建 ThreeJs在实际在实际使用中更多的是结合框架开发例如&#xff1a;vue框架、react框架&#xff0c;在使用时需要配置开发环境&#xff0c;本文使用的是vscode ThreeJs NodeJs vue 1、ThreeJs安装 下载路径&#xff1a;GitHub - mrdoob/three.js: JavaScript…

CentOS命令大全:掌握关键命令及其精妙用法!

CentOS是一种流行的开源企业级Linux发行版&#xff0c;它基于Red Hat Enterprise Linux (RHEL)的源代码构建。对于系统管理员和运维工程师来说&#xff0c;掌握CentOS的常用命令至关重要。 这些命令不仅可以帮助管理服务器&#xff0c;还可以进行故障排查、性能监控和安全加固等…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作&#xff0c; commit&#xff1a;命令用于将你的代码变更保存到本地代码仓库中&#xff0c;它创建了一个新的提交&#xff08;commit…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档&#xff1a;https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码&#xff1a;https://mariadb.org/ma…

Spring Boot 如何实现缓存预热

Spring Boot 实现缓存预热 1、使用启动监听事件实现缓存预热。2、使用 PostConstruct 注解实现缓存预热。3、使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。4、通过实现 InitializingBean 接口&#xff0c;并重写 afterPropertiesSet 方法实现缓存预热。 1、使用…

TCP-模拟BS架构通信

简介 bs是通过浏览器进行访问的每次访问都会开启一个短期的socket用来访问服务器的资源 响应报文的格式 服务端 bs架构中的b是浏览器&#xff0c;不需要我们书写&#xff0c;我们只需要书写服务端即可 服务端 public class Server {public static void main(String[] args) {S…