【C++】变量(一) 什么是变量?

来源:互联网 发布:淘宝流失竞店什么意思 编辑:程序博客网 时间:2024/04/28 05:13

前面介绍了基本的数据类型的表示方法,接下来我们要接触程序编写中应用最多的变量。变量无疑是简化了我们程序编写的难度和复杂度,这就好比数学中用到的方程,通过设定未知数,我们往往可以很好的处理很多棘手的、未知的甚至是通过常规方法不可完成的计算。变量的重要性不必多说,在程序中,我们又是怎么运用变量的呢?下面我们来看一个例子。

 需要我们编写一段程序,计算2的10次幂。看到这个题目的第一反应可能是把10个2相乘,这样就可以很轻松得出结果,就像下面这样:

#include <iostream>int main(){    std::cout<< "2 raised to the power of 10: ";    std::cout<< 2*2*2*2*2*2*2*2*2*2;    std::cout<< std::endl;    return 0}

 这样的计算很简单,也很直观,但是我们必须要一遍一遍地检查,10个2中少了一个都不行。这时,又出现了另外一个问题,如果要求计算的不是2的10次幂,而是2的15次幂、或者2的20次幂,怎么办?我们必须完全按照题目要求,修改程序的主体,并且一丝不苟的检查以避免出现遗漏,但不可避免的是,在如此繁复的工作中,我们极易出错,并且每当我们需要改动的时候,都要重复的来做。那么我们有没有什么方法可以避免这种蛮力的方法呢?

书中给我们提供了另外一种方法,它由两个步骤构成:

1. 命名一个对象来代表并且显示每一次的计算;

2. 当程序语句的前提是true的时候,利用控制流结构(flow-of-control constructs)来为相关程序提供重复执行的操作。

下面就是用这种方法来解决的过程:

#include <iostream>int main(){    int value=2;    int power=10;    int result=1;    for (int count=0;count!=power,++count) //repeat calculation of result until count is equal to power         result*=value;    std::cout<< value<< "raised to power of "<< power<< ": \t"<< result<< std::endl;    return 0;}

可见,程序中的value、power、result和count就是允许储存、修改和查找数值的变量,for循环就是重复执行的主体。同样,我们可以引申一下,如果是我们用户自己输入的底数和指数,那么又该如何解决呢?(只考虑指数是自然数的情况)

首先,我们需要输入两个数——底数和指数,然后的操作跟前面的几乎相同了:

#include <iostream>     int main()     {      std::cout<< "You can enter two numbers to calculate the result of raising the base to the power of the exponent.\n";      int ba, exp;      std::cout<< "Please enter the base:";      std::cin>> ba;      std::cout<< "Please enter the exponent:";      std::cin>> exp;      int result=1;      for (int a=0;a!=exp;++a) result*=ba;      std::cout<< "The result is:"<< result<<std::endl;      return 0;}

—————————————————————————————————————————————————

下面我们正式的来介绍变量。

首先,什么是变量?

 变量给我们程序提供的是可操作的命名的储存空间。在C++中,每一个变量都有其特定的类型,这些类型定义了变量的长度、形式、在内存中储存的范围以及可进行的操作。C++的程序员有时候也把变量称作“对象”。

定义很简单,其实是因为我们一早就接触了变量,只是还不知道如何熟练地去运用。后面我们会更多的接触和学习怎么样编写表达式,那么现在我们先来了解一下C++中表达式的两种类型:

1. lvalue(左值) : 一个表达式中的左值可以出现在赋值符号的左边或者右边;

2. rvalue(右值):一个表达式中的右值只可以出现在赋值符号的右边。

看得有点摸不着头脑哈,我们可以参考下百度百科中对于左值和右值的解释:

C/C++语言中可以放在等号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。或者说左值是代表一个内存地址值,通过这个内存地址,就可以对内存进行读写操作;这也就是为什么左值可以被赋值的原因了。相对应的还有右值:当一个符号或者常量放在操作符右边的时候,计算机就读取他们的“右值”,也就是其代表的真实值。简单来说就是,左值相当于地址值,右值相当于数据值。

下面我们来看几个例子:

int units_sold=0;   double sales_price=0, total_revenue=0;

在上面的定义中,units_sold、sales_price和total_revenue都是左值。那么什么事右值呢?其实在应用中,我们也碰到不少算数表达式,如units_sold*sales_price,这个就是右值,如果我们把它写在赋值符号左边的话就会出现编译错误了(units_sold*sales_price=total_revenue;);同样,字符常量是右值,如“0=1;”就不正确了。

 有一些运算符号(如赋值符号)要求它的运算对象中有一个lvalue,这就使得lvalue可以再更多的环境中使用。如下:

units_sold=units_sold+1;

在上式中,units_sold称为了两个不同操作符的运算对象。

“+”只关心它的运算对象的值,在式中,units_sold的值是最开始储存在内存中的值,“+”的操作就是从内存中读取units_sold的值,并加上1.

而units_sold同样是“=”的运算对象,“=”在计算中会把右边计算的结果赋予左边的units_sold,并储存在内存中,先前的units_sold的值就被覆盖了。

0 0
原创粉丝点击