C++02 变量和基本类型

news2024/12/23 19:28:06

基本类型 

字、字节、bit、Byte之间的关系
 字 word
 字节 Byte
 位 bit
1字 = 2字节  <---> 1word = 2Byte
1字节 = 8位 <---> 1Byte = 8bit
1Byte = 8bits
1KB = 1024Bytes
1MB = 1024KB
1GB = 1024MB

#include <iostream>
using namespace std;
int main()
{
	/*字符和字符串字面值
	 * 使用空格连接,继承C
	 * 字符字面值:单引号'A'
	 * 字符串字面值:双引号"Hello"
	 * 转义序列:\n、\t
	 * 布尔字面值:true、false
	 * 指针字面值:nullptr
	 */

	//注意:字符串是常量字符构成的数组,结尾处以'\0'结束,所以字符串类型实际上长度比内容+1
	char str[20];
	cin >> str; //输入"hello world"
	cout << sizeof(str)<< endl; //20
	cout << strlen(str) << endl;//5

} 

 写道这里,想到一个求字符串长度的问题 --sizeof()、size()、strlen()、length()如何区分

sizeof():操作数所占空间的字节数大小,是操作符,不是函数!!参数:类型、指针、函数

在编译时计算,不能用来返回动态分配的内存空间的大小!

输入"hello world",sizeof(str)的结果是20,sizeof()的作用是计算字符数组str所占用空间字节数的大小,进一步说明了sizeof()在编译时计算。

strlen():计算字符串长度 从第一个字符到第一个'\0'之间的元素个数* 输入"hello world",strlen(str)的结果是5,并不是11

	string str1 = "hello world";
	cout << str1.size() << endl;//11
	cout << str1.length() << endl;//11
char a[] = "hello world";
cout << sizeof(a) << endl;//12

sizeof():计算的时候包含'\0';


变量

读到这里的时候遇到了一个不太懂的问题:

默认初始化:定义时没有指定初始化会被默认初始化,在函数体内部的内置类型变量将不会被初始化

#include <iostream>
using namespace std;

int a;
int main()
{
	int b;
	cout << a << endl;//0
	cout << b << endl;//error C4700: 使用了未初始化的局部变量“b”
	return 0;
} 

C++分区:栈区、堆区、全局静态区、常量区

a为全局变量,存储于全局静态区

b为局部变量,存储于栈区,局部变量不能默认初始化

全局变量可以统一清零,若栈区加了清零操作,会使函数调用等操作缓慢,编译器取消栈区统一清零的操作。

 左值、右值、左值引用、右值引用

	int a = 1;
	1 = a; //表达式必须是可修改的左值

a是一个左值,1是一个右值

	int a = 1;
	int b = 5;
	a = b;
	cout << a << endl;//5
	cout << b << endl;//5

 C++中的左值也可以当右值使用


在这里我又又又遇到一个问题,就是GitHub.com总是打不开的情况!!!! 附上解决办法

1、打开cmd(win+R,输入cmd)

2、ping github;这一步的目的是得到github的ip地址

3、复制ip地址,打开电脑的C:\Windows\System32\drivers\etc,用记事本打开hosts文件,加上github的ip地址+github域名

这个时候问题又又又来了,我没有权限保存不了hosts,解决办法:

4、右键hosts文件的属性

到这一步,我的github.com就可以正常运行啦!

 


复合类型

 引用

  • 引用:引用是一个对象的别名,引用类型引用另一种类型。 int &b = a
  • 引用必须初始化。
  • 引用和其初始值绑定在一起,不是拷贝。一旦定义就不能更改绑定为其他的对象。

指针

  • int*p:指向int类型对象的指针
  • 指针存放对象的地址
  • 获取对象的地址:int a = 5;int *p = &a; &:取地址符
  • 指针的类型与所指向的对象类型必须一致。
  • 指针的四种状态:
  1. 指向一个对象;
  2. 指向紧邻对象的下一个位置;
  3. 空指针;
  4. 无效指针;(对无效指针的操作会引发异常)
  • 指针访问对象:*p;*是解引用符
  • 空指针不指向任何对象。使用int *p = nullptr;使用空指针。
  • void* 指针可以存放任意对象的地址。因无类型,仅操作内存空间,对所存对象无法访问。
  • 建议:初始化所有指针。
  • int *p1,p2; *是对p1的修饰,所以p2是int型不是指针。

引用和指针的区别,面试常考


const:定义一些不能被改变值的变量

  • const对象必须初始化,且不能被改变
  • const变量默认不能被其他文件访问,非要访问,必须在指定const定义之前加extern。
  • 要想在多个文件中使用const变量共享,定义和生命都加extern关键字。
  • const的引用:const int &a = b;可以读取但不能修改a

指针常量和常量指针

指针常量:int *const p;

int a,b;
int * const p = &a;
*p = 9;//正确
p = &b; //错误

总结:指针常量,指向不可改,内容可改

常量指针 : const int *p;

int a,b;
const int *p = &a;
*p = 9;//错误
p = &b;//正确

总结:常量指针,指向可改,内容不可改


顶层const和底层const

  • 顶层 const:可以修饰所有数据类型,表示该类型的对象本身是常量
  • 底层 const:与指针和引用类型有关,表示地址所指向的对象是常量

    底层const==>指针常量
    顶层const==>常量指针


类型别名

  • typedef:定义类型的同义词,typedef int INTER;
  • 新标准别名:别名声明:using int = INTER;(C++11)

对于复合类型不能代回原式进行理解

例如:

typedef char* p;//p是char*的别名

const p str = 0;//指向char的常量指针

如:const char * str = 0;//指向const char的指针

但是可代回后加括号

const (char*)str = 0;


 auto类型说明符 C++11

  • auto类型说明符:让编译器自动退u按类型
  • 一条声明语句只能有一个数据类型,一个auto声明多个变量时只能相同的变量类型 auto a = 1,b = 0.33 //错误

decltype类型指示符(C++11)

  • 从表达式的类型推断出要定义的变量的类型;
  • decltype:选择并返回操作数的数据类型;
  • decltype(f())sum = x;推断sum的类型是函数f()的返回类型;
  • 如果对变量加括号,编译器会将其认为是一个表达式,如 int i -->(i),则decltype((i))得到结果为int& 引用;
  • 赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型,如果i是int,则表达式 i =  x 的类型是int&。

自定义数据结构

struct

  • 类可以以关键字struct开始,紧跟类名和类体
  • 类数据成员:类体定义类的成员
  • C++11:可以为类数据成员提供一个类内初始值

编写自己的头文件

  • 头文件通常包含只能被定义一次的实体:类、const、constexpr变量(常量表达式:指值不会改变,且在编译过程中就能得到计算结果的表达式)

预处理器概述:

  • 预处理器:确保头文件多次包含仍能安全工作
  • 预处理器看到 #include标记时,会用指定的头文件内容代替 #include
  • 头文件保护符:头文件保护符依赖于预处理变量的状态:已定义和未定义。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你打造高精度STM32数字时钟,超详细步骤解析

STM32数字时钟项目详解 1. 项目概述 STM32数字时钟是一个集成了时间显示、闹钟功能、温湿度检测等多功能于一体的小型电子设备。它利用STM32的实时时钟(RTC)功能作为核心,配合LCD显示屏、按键输入、温湿度传感器等外设,实现了一个功能丰富的数字时钟系统。 2. 硬件组成 STM…

腾讯云对象存储cors错误处理

最近将公司的域名进行了修改&#xff0c;同时将腾讯云的对象存储改成了https&#xff0c;为了安全嘛。然后上传软件包的时候发现上传软件就失败了。 在浏览器中打开该 HTML 文件&#xff0c;单击 Test CORS 发送请求后&#xff0c;出现以下错误&#xff0c;错误提示&#xff1…

【Java Web】PostMan业务接口测试工具

目录 一、PostMan概述 二、如何安装Postman 三、Postman的基本使用 一、PostMan概述 在生产环境中&#xff0c;一个项目在开发之前、前后端开发工程师通常需要商讨在前后端数据交互时需要采用什么样的规范格式&#xff0c;如&#xff1a;前端向后端发送请求的uri、请求和响…

【索引】数据库索引之散列索引

目录 1、什么是散列&#xff1f; 2、如何评价一个散列函数的好坏&#xff1f; 3、散列中的桶溢出处理 4、散列在索引中的应用 4、顺序索引和散列索引的比较 1、什么是散列&#xff1f; 顺序文件组织的一个缺点是我们必须访问索引结构来定位数据&#xff0c;或者必须使用二…

datax入门(datax的安装与简单使用)——01

datax入门&#xff08;datax的安装与简单使用&#xff09;——01 1. 官网2. 工具部署&#xff08;通过下载DataX工具包&#xff09;2.1 下载、解压2.2 配置2.2.1 查看配置模版2.2.2 根据模版配置json2.2.3 启动DataX 3. datax的简单使用3.1 mysql2stream3.2 mysql2mysql3.2.1 拼…

HTML【重点标签】

一、列表标签 1.无序列表 父级别&#xff1a; 无序列表的标题 ----表示无序列表的整体&#xff0c;用于包裹li标签 子级别&#xff1a; 无序列表一行的内容 ----表示无序列表的每一项&#xff0c;用于包含一行的内容 语义&#xff1a;构建没有顺序的列表 特点&#xff1a;列…

php聚合快递寄快递小程序

一、引言&#xff1a;告别传统寄件&#xff0c;拥抱便捷新选择 在数字化时代&#xff0c;我们越来越追求便捷和高效。传统的寄件方式已经无法满足现代人快速、便捷的需求。因此&#xff0c;一款聚合快递优惠寄件小程序应运而生&#xff0c;它集合了多家快递公司&#xff0c;为…

Linux高级编程——进程

1.进程的含义? 进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的调度 PID, 进程标识符 当前工作路径 chdir umask 0002 进程打开的文件列表 文件IO中有提到 &#xff08;类似于标准输入 标准输出的编号&#xff0c;系统给0&#xff0c;1&#xf…

台灯的功能作用有哪些?分享好用的护眼灯!看完就知道台灯怎么选

在当今时代&#xff0c;学生们长时间地沉浸于平板、手机、电脑等电子设备中&#xff0c;这些设备的屏幕往往伴随着频闪和蓝光辐射&#xff0c;这无疑对视力健康构成了潜在威胁。家长们日益关注孩子的护眼养眼问题&#xff0c;因为视力疲劳和眼部疾病不仅会降低个体的生活质量&a…

Hyperf 在 NginxProxyManager 如何配置 websocket?

新建代理 填写域名等服务信息&#xff0c;选择支持WebSockets。 创建 SSL 编写nginx配置 location /message.io{proxy_pass http://<你的ip>:<对应端口号>;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upg…

VMware虚拟机三种网络模式设置 - Host-Only(仅主机模式)

一、前言 在之前的《Bridged&#xff08;桥接模式&#xff09;》、《NAT&#xff08;网络地址转换模式&#xff09;》中&#xff0c;我详细介绍了虚拟机网络模式设置中的桥接模式与网络地址转换模式。今天详细讲解一下Host-Only&#xff08;仅主机模式&#xff09;。 在VMware虚…

vue + Lodop 制作可视化设计页面 实现打印设计功能(二)

历史&#xff1a; vue2 Lodop 制作可视化设计页面 实现打印设计功能&#xff08;一&#xff09; 前言&#xff1a; 之前本来打算用直接拿之前做的vue2版本改改就发的&#xff0c;但考虑到现在主流都是vue3了&#xff0c;所以从这篇文章开始使用vue3来写&#xff0c;以及最后…

4年突破20亿,今麦郎如何持续策划凉白开极致产品力?

范总在方便面市场拥有30年的丰富经验&#xff0c;并曾创造过奇迹。1994年&#xff0c;他从冰糖生意进入方便面行业&#xff0c;创立今麦郎的前身华龙集团。当时&#xff0c;方便面市场已经进入红海阶段&#xff0c;市场上有上千家企业&#xff0c;康师傅和统一占据了80%的市场份…

Apple Intelligence,我们能得到什么?(上)

苹果公司WWDC 2024发布会&#xff0c;苹果AI成为最吸睛的焦点。不过&#xff0c;苹果的AI不是大家口中的AI&#xff0c;而是苹果独有的概念&#xff1a;Apple Intelligence&#xff0c;苹果智能。 所谓Apple Intelligence&#xff0c;被定义为iPhone、iPad和Mac的个人智能系统…

Arduino - 继电器

Arduino - 继电器 In a previous tutorial, we have learned how to turn on/off an LED. In this tutorial, we are going to learn how to turn on/off some kind of devices that use the high voltage power supply(such as a light bulb, fan, electromagnetic lock, lin…

Linux高并发服务器开发(五)终端和守护进程

文章目录 1 概念2 会话基本概念和API3 守护进程&#xff08;重点&#xff09;守护进程模型 4 获取当前系统时间 1 概念 终端 进程的集合叫进程组 也称为作业 是执行程序的过程 2 会话基本概念和API 进程组的集合 3 守护进程&#xff08;重点&#xff09; 独立于控制…

Linux内核中网络数据的流量控制(TC: Traffic control 和 QDISC)

(个人能力有限&#xff0c;本文如有错误之处&#xff0c;欢迎交流指正) 1 简介 在进行网络数据 接收 和 发送 过程中&#xff0c;网卡设备到L3(网络层) 中间会经历流量控制(Traffic control)。 《BPF之巅.洞悉Linux系统和应⽤性能》P413 qdisc这个可选层可以⽤来管理⽹络包的…

机器学习-数据预处理-聚类-回归-分类-单车数据集

机器学习-数据预处理-聚类-回归-分类-单车数据集 前言一、数据预处理1. 导入数据集2. 数据预处理3. 处理缺失值4. 生成特征用于后续进一步的分析 二、数据分布可视化1. 骑行时长分布2. 起始站和终点站分布可视化3. 高峰期与非高峰期骑行频次分布 三、聚类分析1. K-means聚类 四…

PostgreSQL 连接器:在 SeaTunnel 中的应用与优势

在现代企业中&#xff0c;数据已经成为核心资产&#xff0c;基于开源数据集成平台SeaTunnel&#xff0c;工程师如何高效地连接和管理这些数据源&#xff0c;直接关系到企业的竞争力和运营效率。 本文将给大家介绍如何通过 JDBC PostgreSQL 数据源连接器&#xff0c;在 SeaTunne…

240627_图像24位深度(RGB图)转为8位深度(单通道图)

240627_图像24位深度&#xff08;RGB图&#xff09;转为8位深度&#xff08;单通道图&#xff09; 在使用网络上下载下来的一部分图像分割数据集时&#xff0c;有些标签图你看着是一个黑白图&#xff0c;但是他还是有可能是一张RGB三通道图&#xff0c;具体怎么区分呢。右击图…