(第五章C、C语言变量和常量
第五章 变量和常量
5.1 从类型到变量
5.1.1 公孙龙的“白马非马”
故事是春秋时的公孙龙先生说的。
城门上告示:“马匹不得入城”。公孙龙同志骑白马而来,遭拒入。公孙龙一脸正色:“告示上写的是‘马’,而我骑的是‘白马’,难道 ‘马’等于 ‘白马’吗?”
守门士兵觉得白马还真不是马,于是放行。
依公孙龙先生的理论认为:如果白马是马,黑马也是马,那么岂不白马等于黑马,所以,不能说白马是马。“白马非马”是中国哲学史上的一桩公案。不过,若是我们从程序的角度上说,可以认为:马在这里表示一种类型,而白马,黑马它们的类型都是马。
白马,黑马具有相同的“数据类型”,但它们都相对独立的个体。从这点说,别说有白黑之分,就算同样是白马,这一匹和哪一匹白马,也是相对独立的个体。
在程序中,“类型”和“变量”的关系正是“马”和“白马”的关系。
如果C或C++有这种数据类型: Horse,那么,定义一匹“白马”的变量应该这样:
Horse AWhiteHorse;
以后我们说不定真的有机会自已定义Horse,不过现在,我们在上一章的学的数据类型是:
char,int,bool 等等。
假设我们需发使用一个有关年龄的变量,在C或C++中是这样定义的:
int age;
现在让我们来事先建立一个空的工程,随着本章课程的进展,我们需要不断地在工程中加入零星的代码,及时实践。
仍然是一个空的控件台程序。方法是……以前我们讲过,忘了就看前面章节吧。
代码文件Unit1.cpp中,手工加入以下的黑体部分:
//---------------------------------------------------------------------------
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])]
{
? getchar();
? return 0;
}
//---------------------------------------------------------------------------
5.1.2 定义变量
语法:
数据类型 变量名;
“张三”既可以指张三这个人,也可以是张三的名字。同样,上面的“变量名”,其实也就是变量本身。
举上一节的例子:
int age;
其中,int 是数据类型(整型),而 age 是变量名,更多的时候,我们就说是变量 age。最后是一人分号。它表示定义一变量在C或C++里一句完整的语句。因为C++的语言总是以分号结束。
如果要声明一个字符类型变量:
char letter;
声明一个bool类型的变量:
bool do_u_love_me;
其它类型,除了void不能直接定义一个变量以外,格式都是一样的。
void avoid; //错!void 类型无法直接定义一个变量。
有时同一时候同一数据类型需要多个变量,此时可以分别定义,也可以一起定义:
int a;
int b;
int c;
下面采用一起定义,会更省事:
int a,b,c;
一起定义多个同类型变量的方法是:在不同变量之间以逗号(,)分隔,最后仍以分号(;)结束。
让我们来试试变量定义,另外,我们还要趁此机会,看看一个变量在仅仅进行定义之后,它的值会是什么。
继续上一小节的代码。仍然是加入黑体部分,当然 // 及其后面的内容是注释,你可以不输入。
......
int main(int argc, char* argv[])]
{
?/定义变量//
? //以下定义三个变量:a,b,c
? int a;??????
? double b,c;?
? //a,b,c仅仅被定义,它的值会是什么?我们用 cout 输出三个变量:
? cout << "a = " << a << " b = " << b << " c = " << c << endl;
? getchar();
? return 0;
}
最好先保存代码文件和工程文件。然后按F9运行。以下是笔者机器得到结果。
a 是1,b和c都像天文数字?嗯,从这里我们学到一个C,C++编程极其重要知识:未初始化的变量,它的值将是未确定的。所谓“未初始化”,就是指这个变量只有定义代码,而没有赋值。
(立即重