前言

前面我们了解了C/C++的数据类型及大小,我们继续来看变量和常量;


1 变量的创建

了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。
什么是变量呢?把经常变化的值称为变量,不变的值称为常量。

变量创建的语法形式是这样的:

data_type name;
 |         |
 |         |
数据类型 变量名
int age; //整型变量
char ch; //字符变量
double weight; //浮点型变量

变量的命名规则遵循以下原则:

• 变量名只能由字⺟、数字和下划线组成,且必须以字⺟或下划线开头。
• 变量名不能以纯数字开头,也不能包含特殊字符,如空格、连字符等。
• 变量名不能使⽤语⾔的关键字,如 int、char、if等。
• 变量名应具有意义,有助于理解变量的含义和⽤途。
• 变量名应简短明了,避免使⽤过⻓的名称。
• 变量名应区分⼤⼩写,例如 myVariable 和 myvariable 被视为两个不同的变量.

2 变量初始化

变量在创建的时候就给⼀个初始值,就叫初始化

int age = 18;
char ch = 'w';
double weight = 48.0;
unsigned int height = 100;

3 变量的分类

  • 全局变量:在大括号外部定义的变量就是全局变量,全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的;
  • 局部变量:在⼤括号内部定义的变量就是局部变量,局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使用的。
#include <iostream>
using namespace std;
int global = 2023; //全局变量
int main()
{
 int local = 2018; //局部变量
 cout << local << endl;
 cout << global << endl;
 return 0;
}

如果局部和全局变量,名字相同呢?

#include <iostream>
using namespace std;
int n = 1000;
int main()
{
 int n = 10;
 cout << n << endl; //打印的结果是多少呢?
 return 0;
}

其实当局部变量和全局变量同名的时候,局部变量优先使⽤

  • 未初始化状态下的全局变量和局部变量

未初始化的局部变量

#include <iostream>
using namespace std;
int main()
{
 //局部变量
 int a;
 char c;
 float f;
 double d;
 
 cout << "int:" << a << endl;
 cout << "char:" << c << endl;
 cout << "float:" << f << endl;
 cout << "double:" << d << endl;
 return 0;
}

未初始化的全局变量

//未初始化的全局变量
#include <iostream>
using namespace std;
//全局变量
int a;
char c;
float f;
double d;
int main()
{
 cout << "int:" << a << endl;
 cout << "char:" << c << endl;
 cout << "float:" << f << endl;
 cout << "double:" << d << endl;
 return 0;
}

在Dev-C++下:
在这里插入图片描述
在VS编译器下:
在这里插入图片描述
上图中未见明显差异,在 double 类型下展示了不同的数据,这主要取决于不同的编译器,全局变量和局部变量在初始化上主要有以下区别:

全局变量:全局变量通常在定义时就被初始化,如果没有明确指定初始值,它们通常会被初始化为0。
局部变量:局部变量通常不会自动初始化。它们需要在使⽤之前明确地赋值或初始化。如果没有初始化,它们的值将是未定义的,使⽤未初始化的局部变量可能会导致不可预测的⾏为或运⾏时错误,因此局部变量建议初始化。

⼩提⽰:
如果⼀个题⽬既可以使⽤全局变量,⼜可以使⽤局部变量,那怎么选择呢?
如果是在竞赛中:
能使⽤全局变量,⼀般会直接是全局变量,这样的好处是:

  1. 变量不需要初始化,因为默认会初始化为0,这样写会比较快;
  2. 很多时候,会避免传参,因为全局变量到处都可以使⽤.(后⾯会讲)

所以在在竞赛中其实哪种⽅便就使⽤哪种,全局变量的使⽤很常见;

但是在企业⾥软件开发的⼯程实践中⼀般建议:能使⽤局部变量的,尽量少使用全局变量。
因为企业级的开发,代码量⽐较⼤,全局变量在任意地⽅都可以使⽤,这样就变得不可控了。

4 常量

常量就是不能被改变的值,通常我们会使⽤三种常量:

  • 字⾯常量
  • #define 定义的常量
  • const 定义的常量

下⾯分别介绍⼀下。

4.1 字面常量

整型常量: 100,-5,0,0x123 整型常量⼀般可以写成10进制、8进制、16进制。
10进制数字,如: 6、17、22、123
8进制数字,⼀般是数字0开头的,⽐如: 012 , 016
16进制数字,⼀般是0x开头的数字,⽐如: 0x123 , 0xFF
字符常量: ‘a’
浮点型常量: 3.14 , 1E6 (科学计数法的形式)

4.2 #define定义常量

有时候也会使⽤ #define 来定义常量,⽐如:

#define 常量名 内容

代码举例:

#include <iostream>
using namespace std;
#define M 100
#define CH 'x'
#define PI 3.14159
int main()
{
 cout << M << endl;
 cout << CH << endl;
 cout << PI << endl;
 return 0;
}

这⾥定义的 M、CH、PAI 都是常量,可以直接使⽤,但是不能被修改。
使⽤ #define 定义常量的时候是不关注类型的,只关注常量的名字叫啥,常量的值是啥,编译在处理这种常量的时候就是直接替换,在出现常量名字的地⽅,通通替换成常量的内容。

上⾯的代码被编译器替换后就是:

#include <iostream>
using namespace std;
int main()
{
 cout << 100 << endl;
 cout << 'x' << endl;
 cout << 3.14159 << endl;
 return 0;
}

4.3 const 定义常量

除了上⾯的⽅式之外,C++中还可以使⽤ const 来定义常量,这种常量会有具体的类型。⽐#define 定义常量更加严谨。语法形式如下:

const 类型 常量名字 = 常量值;

⽐如:

const double PI = 3.14159;
#include <iostream>
using namespace std;
const double PI = 3.14159;
int main()
{
 int r = 0;
 cin >> r;
 cout << "周⻓:" << 2 * PI * r << endl;
 cout << "⾯经:" << PI * r * r << endl; 
 
 //PI = 3.14;//这种写法是错误的,常量不能被修改
 return 0;
}

习惯上,这种常量的名字⼀般会写成⼤写,⽽普通变量的名字不会全⼤写,这样就可以做⼀个区分。

使⽤ const 定义的常量的好处:

  • 增加了程序的可读性, PI ⽐ 3.14159 更加容易理解和书写、使用。
  • 增加了程序的可维护性,如果改变常量的值,只要在定义的部分修改,使⽤的地⽅也就随之改变了,做到了"⼀改全改"的效果。
  • 常量是不能修改的,当然 const 定义的常量⾃然也不能修改。
#include <iostream>
using namespace std;
int main()
{
 const int num = 10;
 num = 20; //修改num,编译器会报错的
 return 0;
}

在这里插入图片描述
未来需要常量的地⽅,经常使⽤ const 定义常量,后期我们慢慢观察。

5 练习

练习1:

买票

牛牛正在给他的朋友们买电影票,已知一张电影票价是100元,计算 x 位朋友的总票价是多少?

#include <iostream>
using namespace std;
int main() 
{
 int a = 0;
 cin >> a;
 cout << a * 100 << endl;
 return 0; 
}

练习2:

A + B 问题

#include <iostream>
using namespace std;
int main()
{
 int a = 0;
 int b = 0;
 cin >> a >> b;
 cout << a + b << endl;
 return 0;
}

⼩提⽰:
题⽬描述中的【保证 A,B 及结果均在 32 位整型范围内,保证结果在 32 位整型范围内】是什么意思?就是计算的结果使⽤ int 类型是可以存储的。在OJ做题的时候,多留意数据类型的范围。

练习3:

鸡兔同笼

#include <iostream>
using namespace std;
int main()
{
 int j = 0; //鸡的个数
 int t = 0; //兔的个数
 int h = 35; //头的个数
 int f = 94; //脚的个数
 j = (4 * h - f) / 2;
 t = h - j;
 cout << t << " " << j << endl;
 return 0;
}

这几题比较简单,我们不做详细讲解;


总结


Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐