日期:2020年3月27日
作者:Commas
注释:开始我的C++学习的奇妙之旅,愿意和我一起学习的小伙伴们可以关注我,也可以给我点赞,如若博客有哪里写的不好的地方,还望各位看官指出,非常感谢……
更多C++内容,请看我的《C++学习的奇妙之旅》
一、前言
程序中的数据包括常量与变量
常量
:在程序执行期间不会改变的固定值,又称为字面量
;变量
:在程序执行期间可以改变的数据,本质是程序可操作的存储区的名称
。
类型 | 读写说明 |
---|---|
常量 | 仅只读,在定义并初始化后,不可修改原值 |
变量 | 可读写,在程序运行中,可以修改变量值 |
二、基本数据类型
在C++中,数据类型决定了变量存储的大小和布局,基本数据类型可分为以下4类:
- 整数类型(int):基本整型;
- 实数类型(float\double):浮点数类型;
- 布尔类型(bool):存储true\false;
- 字符类型(char):实际上存储的是整数,可以容纳单字符的编码(ASCII码);
不知道有没有注意到,和其他高级程序语言有点不太一样,C++在基本数据类型中,是没有字符串变量的,可以采用字符串数组
存储字符串的,这很C字符串风格,但是已经不鼓励使用了,不过还是要了解一下。在标准C++类库中有一个String类
,这个是值得推荐的,很C++字符串风格。
另外,值得指出的是,数据的基本类型所占字节数在不同的编译环境可能会有不同,可以用sizeof(type)
查看,如以下我们查看一下int类型所占字节长度:
#include <iostream>
using namespace std;
// main() 是主程序,程序开始执行的地方
int main()
{
//int类型所占字节长度
cout<<sizeof(int)<<endl;
return 0;
}
控制台输出:4
三、常量
(一)常量的类型
(1)整数常量
其实,一个整数常量的表示 = 前导 + 数据本身 + 后缀
表示;
前导
决定数据的进制,如下:
- 十进制:
无前导 +数据本身 - 八进制: 前导
0
+ 数据本身(0~7
) - 十六进制:前导
0x
+ 数据本身(0~9
及A~F
)
//(1)十进制
2020
//(2)八进制
012
018 //是不合法的,八进制不可能会出现8
//(3)十六进制
0xFF
后缀
决定数据类型,整数常量默认的是有符号(signed)的整数(long),可修改为:
- 无符号整数(unsigned):U 或 u,大小写随意;
- 长整数(long):L 或 l,大小写随意;
2020 //整数
2020l //长整数
2020u //无符号整数
2020ul //无符号的长整数,符号顺序随意
2020lu //无符号的长整数,符号顺序随意
(2)浮点常量
其实,一个浮点常量的表示 = 整数部分 + . + 小数部分 + 后缀 + 指数部分
表示;
后缀
决定数据类型,整数常量默认的是(double)浮点类型,可修改为:
- float类型:F 或 f,大小写随意;
另外,指数部分引入E 或 e来表示,如3.14159可以表示为314159E-5L
(3)布尔常量
- true:代表真,不应该将其看作为1;
- false:代表假,不应该将其看作为0;
(4)字符与字符串常量
类型 | 表示 | 存储形式 | 示例 |
---|---|---|---|
转义字符 | 如\n,\t等 | 该字符的ASCII码 | \n,存放的是换行符\n的ASCII码 |
字符 | 西文单引号‘’ | 该字符的ASCII码 | ‘a’,存放的是a的ASCII码 |
字符串 | 西文双引号“” | C风格的字符串:字符的ASCII码依次存放,在最后的默认用\0作为结束标记 | “a”,存放的是a、\0的ASCII码 |
字符串常量前面还可以加前导(前缀),可以改变类型,如下:
前导(前缀) | 含义 | 类型 |
---|---|---|
u | Unicode 16字符串 | char16_t |
U | Unicode 32字符串 | char32_t |
L | 宽字符 | wchar_t |
u8 | UTF-8(仅用于字符串字面量常量) | char |
u"hello"
U"hello"
L"hello"
u8"hello"
(二)常量的定义
定义变量总共有两种方式:
- 使用#define预处理器,语法如下:
#define identifier value
//identifier:标识符
//value:常量的值
//示例:
#define LENGTH 2020;
#define NAME 'C';
- 使用const关键字,语法如下:
const type identifier = value;
//type:定义常量的类型
//identifier:标识符
//value:常量的值
//示例:
const int LENGTH = 2020;
const char NAME = 'C';
//以下为抛出异常的示例:
//因为char是单字节字符类型,不可以存字符串
const char NAME = "C";//invalid conversion from 'const char*' to 'char' [-fpermissive]
const char NAME = 'Commas';//character constant too long for its type
四、变量
(一)变量的定义
在使用变量前,我们要规定变量的类型,这样编译器才知道要给这些变量多少个字节的空间,我们先来看看,如何定义一个变量吧,语法如下:
type variable_list;
示例如下:
//(1)定义多个同类型的变量
int i,j,k;
//(2)定义单个变量
double d;
(二)变量的定义并且初始化
分配了这些字节空间后,变量的初始值是什么,得分以下情况讨论:
- 全局变量:所有函数体之外的变量,如果不给初始值,它也会自动有一个基础的初始值,比如说数值型的基础初始值为0;
- 局部变量:在函数体内部的变量,如果不给初始值,那么值是不确定的,可能会是垃圾数据,所以定义后对变量初始化,是一个非常好的习惯。
//NO1:
type variable_name = value;
//NO2:
type variable_name(value);
//NO3:
type variable_name = {value};
//NO4:
type variable_name{0}
示例如下:
#include <iostream>
using namespace std;
// main() 是主程序,程序开始执行的地方
int main()
{
int intA = 1;
int intB(2);
int intC = {3};
int intD{4};
cout<<"intA="<<intA<<endl;
cout<<"intB="<<intB<<endl;
cout<<"intC="<<intC<<endl;
cout<<"intD="<<intD<<endl;
return 0;
}
控制台输出:
intA=1
intB=2
intC=3
intD=4
另外,NO3和NO4使用了大括号,此初始化方式被称为列表初始化
,该方式不允许信息的丢失,如int类型变量无法存储double类型的数据,但是NO1和NO2会将溢出信息丢失从而不会影响程序的后续运行,如下:
//(1)可以运行
int intA = 1.111;//丢失小数部分,输出值为:1
int intB(2.222);//丢失小数部分,输出值为:2
//(2)抛出异常
int intC = {3.33};//抛出异常:error: narrowing conversion of '3.3300000000000001e+0' from 'double' to 'int' inside { } [-Wnarrowing]
int intD{4.44};//抛出异常:error: narrowing conversion of '4.4400000000000004e+0' from 'double' to 'int' inside { } [-Wnarrowing]
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/105138910