C++学习之路(三):变量

前言

变量基本上是所有编程语言的基础,是构建项目的基础。
下面的代码就是声明了一个变量:

// int就是变量的类型
// num就是变量名
// 0就是num的初始值
int num = 0;

为了便于记忆和理解,将类型和变量名类比一下:

  1. 可以设想成一个木箱,木箱里面装着物品。木箱就是变量名,而这个物品就是数据
  2. 木箱装着什么品种的物品,比如苹果,梨子,香蕉,对应的就是变量的类型,int,short,long类型。

一.变量名

对于C++变量名有以下的命名规则(这里直接搬运C++ Primer Plus 第6版 中文版 3.1.1的内容)

  1. 在名称中只能使用字母字符,数字,下划线(_)
  2. 名称中的第一个字符不能是数字
  3. 区分大写字符和小写字符(例如:int A和int a是两个不同的变量名)
  4. 不能将C++关键字用作名称
  5. 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。(说人话就是最好不要使用类似于_time_stop,_Donut的组合做为变量名)
  6. C++对于名称的长度没有限制,名称中所有的字符都有意义。但是有些平台有长度限制

一般的变量名可以写成类似"my_name"或者"myName"这样的,我个人习惯写成myName的形式。

二.变量类型

C++的变量类型有哪些呢?
基本数据类型

// 整型
int,short,long,long long
// 浮点型
float,double,long double
// 字符类型
char
// 布尔类型
bool

还有枚举、指针、数组、引用、类等等类型,这些类型会在后续逐步介绍的。

2.1 整型

整型有short,int,long,long long四种类型

#include<iostream>

int main() {
    
    
	short var_short = 22;
	int var_int = 123;
	long var_long = 1234l; // 后缀l,表示long
	long long var_long_long = 12345ll; // 后缀ll,表示long long
	return 0;
}

2.1.1 初始化

#include<iostream>

int main() {
    
    
	// 声明一个int类型的变量,但是不初始化
	int var; // 不建议这样做
	
	// 声明一个int类型的变量并且初始化为22
	int var = 22;
	return 0;
}

变量声明有两种方式,第一种只声明,不去初始化;第二种声明并且初始化。不要使用第一种方式,因为对于C++而言,如果你不去手动初始化,那么变量的值是一个随机的内存数据,对于Visual Studio会直接报错。

error C4700: 使用了未初始化的局部变量“var”

所以不同于Java的自动初始化,对于C++你申明了一个变量,一定要记得对于变量一定要手动初始化。

扫描二维码关注公众号,回复: 14990838 查看本文章

2.1.2 取值范围

对于int,short,long,long long类型在32为操作系统上,最大的值是多少,最小的值是多少呢?它们占用的内存大小是多少呢?
整型占用的大小,参考C++ Primer Plus 第6版 中文版 3.1.3的内容:

  1. short至少16位
  2. int至少与short一样长
  3. long至少32位,且至少与int一样长
  4. long long至少64位,且至少与long一样长

不同的系统占用的内存大小是不一样的,那么我们该如何得知当前系统类型占用的内存大小呢?可以使用sizeof()来获取占用的内存大小。

#include<iostream>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	std::cout << sizeof(int) << std::endl;
	std::cout << sizeof(short) << std::endl;
	std::cout << sizeof(long) << std::endl;
	std::cout << sizeof(long long) << std::endl;
	return 0;
}

输出结果:

4
2
4
8

那么最大值和最小值该如何确定呢?同样可以使用C++提供的工具climits和cstdint(C++11)里面的宏常量来确定。
参考API地址:C++ 标准库头文件其中的数值极限

#include<iostream>
#include<climits>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	std::cout << "short最小值: " << SHRT_MIN << std::endl;
	std::cout << "short最大值: " << SHRT_MAX << std::endl;
	
	std::cout << "int最小值: " << INT_MIN << std::endl;
	std::cout << "int最大值: " << INT_MAX << std::endl;
	
	std::cout << "long最小值: " << LONG_MIN << std::endl;
	std::cout << "long最大值: " << LONG_MAX << std::endl;
	
	std::cout << "long long最小值: " << LLONG_MIN << std::endl;
	std::cout << "long long最大值: " << LLONG_MAX << std::endl;
	return 0;
}

输出结果:

short最小值: -32768
short最大值: 32767

int最小值: -2147483648
int最大值: 2147483647

long最小值: -2147483648
long最大值: 2147483647

long long最小值: -9223372036854775808
long long最大值: 9223372036854775807

2.1.3 数据类型溢出

当你使用某个类型的数据的时候,已经达到该数据类型最大值或者最小值了,但是你还继续增大或者减小该数据,会导致该数据达到反向的最大值或者最小值。
不废话,直接上代码:

#include<iostream>
#include<climits>

int main() {
    
    
	int max_var = INT_MAX;
	std::cout << "int最大值: " << max_var << std::endl;
	max_var = max_var + 1; // 模拟溢出
	std::cout << "int最大值溢出: " << max_var << std::endl;

	int min_var = INT_MIN;
	std::cout << "int最小值: " << min_var << std::endl;
	min_var = min_var - 1; // 模拟溢出
	std::cout << "int最小值溢出: " << min_var << std::endl;
	return 0;
}

输出:

int最大值: 2147483647
int最大值溢出: -2147483648

int最小值: -2147483648
int最小值溢出: 2147483647

数据类型溢出的代码,告诫我们在处理基本数据类型的时候要考虑边界问题的判断,防止溢出的情况出现。

2.1.4 无符号类型

无符号类型就是在int,short,long,long long四种整型都有无符号类型unsigned,例如short类型。

#include<iostream>
#include<climits>

int main() {
    
    
	unsigned short var = USHRT_MAX;
	std::cout << var << std::endl;
	var = var + 1; // 模拟溢出
	std::cout << var << std::endl;
	return 0;
}

输出:

65535
0

原先的short类型是-32768到+32767,无符号类型short牺牲了负数,只取正数,范围是0~65535,无符号(unsigned)类型只表示正数

2.2 浮点型

浮点数类型主要是float,double,long double,它们和整型的区别是带小数点的,代码如下:

#include<iostream>
#include<climits>

int main() {
    
    
	float var_f = 1.234f;
	float var0_f = 3.14e+5; // 3.14乘以10000,科学计数法
	double var_d = 2.345;
	long double var_ld = 2.365234;
	std::cout << var0_f << std::endl;
	return 0;
}

2.2.1 取值范围

#include<iostream>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	std::cout << sizeof(float) << std::endl;
	std::cout << sizeof(double) << std::endl;
	std::cout << sizeof(long double) << std::endl;
	return 0;
}

输出:

4
8
8

2.2.2 最大值和最小值

float,double,long double的最大值和最小值:

#include<iostream>
#include<cfloat>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	std::cout << "float最小值: " << FLT_MIN << std::endl;
	std::cout << "float最大值: " << FLT_MAX << std::endl;

	std::cout << "double最小值: " << DBL_MIN << std::endl;
	std::cout << "double最大值: " << DBL_MAX << std::endl;

	std::cout << "long double最小值: " << LDBL_MIN << std::endl;
	std::cout << "long double最大值: " << LDBL_MAX << std::endl;
	return 0;
}

输出:

float最小值: 1.17549e-38
float最大值: 3.40282e+38
double最小值: 2.22507e-308
double最大值: 1.79769e+308
long double最小值: 2.22507e-308
long double最大值: 1.79769e+308

2.3 字符型

字符型则是char,代码如下:

#include<iostream>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	char ch0 = 'a';
	char ch1 = 'A';
	char ch2 = 97;
	char ch3 = 65;
	std::cout << ch0 << std::endl;
	std::cout << ch1 << std::endl;
	std::cout << ch2 << std::endl;
	std::cout << ch3 << std::endl;
	return 0;
}

输出:

a
A
a
A

重点在于ch2和ch3,char类型的数据可以赋值整数,而97和65在ASCII里面代表的就是a和A。通过char类型的这个特性,对于某些用到char类型的算法题目,可以用整数型配合加减来解决。

#include<iostream>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	char ch = 97;
	for (int i = 0; i <= 25; i++) {
    
    
		std::cout << ch << std::endl;
		ch = ch + 1;
	}
	return 0;
}

2.4布尔型

布尔类型很简单,就两个值。0和非0,0代表false,非0(一般用1)代表true。

#include<iostream>

int main() {
    
    
	// windows 10,Visual Studio 2022,Debug模式,x86
	bool flag0 = true;
	std::cout << flag0 << std::endl;
	bool flag1 = false;
	std::cout << flag1 << std::endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/RQ997832/article/details/123817695