C++中的常量和变量
1 何为变量
1.1内存和寻址
编程语言中变量的使用和计算机的组成及其工作原理与关,在计算机中包含微处理器和临时存储的空间,这被称之为随机存储器RAM(random-access memory)。处理器负责执行程序,此时从RAM中获取要执行的应用程序以及相关的数据,包括显示在屏幕上的数据和用户输入的数据。RAM类似于有编号的储物柜,即地址。用户访问特定的内存单元需要使用指令要求处理器从这里取值获将值写入到这里。
1.2 如何声明变量及访问使用内存
现在我们通过一个小程序来解释何为变量,该程序将两个数字相乘,用户提供两个数值,然后需要对其进行储存。
在程序中变量类型向编译器表明数据性质,编译器就会为改变量预留出必要的空间。在此需要注意除非给变量赋予初始值,不然我们无法确保相应内存中的内容是什么,这将为之后的程序代码带来不便。因此对变量的初始化是非常有必要的。
1.3程序演示
程序1
#include<iostream>
using namespace std;
int main ()
{
cout <<"以下将计算两个数字的和"<<endl;
cout <<"请输入第一个数字:" ;
int shu1=0;
cin >> shu1;
cout <<"请输入第二个数字:" ;
int shu2=0;
cin >> shu2;
int jieguo=shu1*shu2;
cout<<shu1<<"×"<<shu2;
cout<<"="<<jieguo<<endl;
return 0;
}
运行结果为
该应用程序需要我们输入两个数字,将他们相乘并显示其结果。输入的数字必须存储到内存中。
int shu1=0;
这行代码声明了一个变量,该变量类型为int(整型),名称为shu1,并设置该变量的初始值为0.
这里需要注意:
1)变量名可以包括数字、字母,但是不能以数字开头。
2)变量名不能包括空格和算术运算符(+、-等),可以通过下划线"_"拉长变量名。
3)变量名不能是保留的关键字(保留字)如下图
上表来源:C++ 的关键字(保留字)完整介绍 | 菜鸟教程 https://www.runoob.com/w3cnote/cpp-keyword-intro.html
在c++中可以同时声明多个相同类型的变量如上个程序可改写为,int shu1=0,shu2=0.jieguo=0;也可以在函数开头声明变量,然鹅,在我们需要的时候再声明变量是一个更好的选择,因为这样可以让代码更容易理解。
1.4 局部变量和全局变量
变量的使用智能在其作用域内发挥其作用,若超出其作用域范围编译器则无法识别,导致程序无法编译。
局部变量
程序2
#include<iostream>
using namespace std;
void xiangchen ()
{
cout <<"请输入第一个数字:" ;
int shu1=0;
cin >> shu1;
cout <<"请输入第二个数字:" ;
int shu2=0;
cin >> shu2;
int jieguo=shu1*shu2;
cout<<shu1<<"×"<<shu2;
cout<<"="<<jieguo<<endl;
}
int main()
{
cout <<"以下将计算两个数字的和"<<endl;
xiangchen();
//cout<<shu1<<"×"<<shu2;
//cout<<"="<<jieguo<<endl;
return 0;
}
程序2和程序1的输出结果一样,差别在于,将工作交给了函数xiangchen()去完成,并在main()中调用。该程序中变量shu1、shu2、jieguo被限定在函数void xiangchen ()内不能在main()函数中使用否则编译器无法识别。例如我们取消掉程序2中的注释,我们将得到以下结果:
这因为shu1、shu2为局部变量,被限定在声明它的函数“xiangchen()”内。函数结束后销毁所有的局部变量,并归还他们占用的内存。
全局变量
在程序2中如果变量实在函数xiangchen()外部,则函数xiangchen()和main()都可以使用它们。
如下程序3
#include<iostream>
using namespace std;
int shu1=0;
int shu2=0;
int jieguo=0;
void xaingchen ()
{
cout <<"请输入第一个数字:" ;
cin >> shu1;
cout <<"请输入第二个数字:" ;
cin >> shu2;
int jieguo=shu1*shu2;
cout<<shu1<<"×"<<shu2;
cout<<"="<<jieguo<<endl;
}
int main()
{
cout <<"以下将计算两个数字的和"<<endl;
xaingchen();
cout<<shu1<<"×"<<shu2;
cout<<"="<<jieguo<<endl;
return 0;
}
程序3中的变量shu1、shu2、jieguo都是全局变量因为它们不再任何函数内部,因此在两个函数中都能使用。
1.5变量类型
如何确定变量的长度
可利用sizeof()
代码如下
#include<iostream>
#include<string>
#include <limits>
using namespace std;
int main()
{
cout << "type: \t\t" << "************size**************"<< endl;
cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();
cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;
cout << "char: \t\t" << "所占字节数:" << sizeof(char);
cout << "\t最大值:" << (numeric_limits<char>::max)();
cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);
cout << "\t最大值:" << (numeric_limits<signed char>::max)();
cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;
cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);
cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();
cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;
cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);
cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();
cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;
cout << "short: \t\t" << "所占字节数:" << sizeof(short);
cout << "\t最大值:" << (numeric_limits<short>::max)();
cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;
cout << "int: \t\t" << "所占字节数:" << sizeof(int);
cout << "\t最大值:" << (numeric_limits<int>::max)();
cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;
cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);
cout << "\t最大值:" << (numeric_limits<unsigned>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;
cout << "long: \t\t" << "所占字节数:" << sizeof(long);
cout << "\t最大值:" << (numeric_limits<long>::max)();
cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;
cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);
cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;
cout << "double: \t" << "所占字节数:" << sizeof(double);
cout << "\t最大值:" << (numeric_limits<double>::max)();
cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;
cout << "long double: \t" << "所占字节数:" << sizeof(long double);
cout << "\t最大值:" << (numeric_limits<long double>::max)();
cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;
cout << "float: \t\t" << "所占字节数:" << sizeof(float);
cout << "\t最大值:" << (numeric_limits<float>::max)();
cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;
cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);
cout << "\t最大值:" << (numeric_limits<size_t>::max)();
cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;
cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;
// << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;
cout << "type: \t\t" << "************size**************"<< endl;
return 0;
}
结果如下
2 何为常量
我们通过一个简单的计算元的周长和面积的程序来理解
mianji=Pibianchangbianchang (ΠR^2)
zhouchang=2Pibianchang (2πR)
在公式中pi为常量,其值大约为22/7,在该过程中pi值不变。我们希望将pi定义为声明后就不能改变的常量。常量类似于变量只是不能改变值的大小。在C++中常量可以是:
1)字面常量;
2)关键字const声明的常量;
3)关键字constexpr声明过常量表达式;
4)关键字enum声明的枚举常量;
5)#define定义的常量 (不推荐);
1252263