学习程序语言第一件事,通常就是先做个简单的实例,从头到尾运行下,了解一些基本数据类型,变量的流程和控制语法。
一、数据类型与变量
我们先做一个“Hello world”吧,然后再了解C++的数据类型。
1.1 Hello World!
废话不多说,先来看看如何使用C++来编写一个简单的程序,这里我是在linux ubuntu下进行编辑并且编译的:
#include <iostream> using namespace std; int main() { cout<<"Hello World!"<<endl; cout<<"This is Jay Zhang!"<<endl; cout<<"zhangjie201412@live.com"<<endl; return 0; }ok,代码编辑完成,我们来编译下,linux下是使用g++来编译
root@jay:/home/jay/c++/1# g++ -o hello hello.cpp
然后来执行下,看下结果:
root@jay:/home/jay/c++/1# ./hello
Hello World!
This is Jay Zhang!
zhangjie201412@live.com
大家看到程序应该会比较关注前面两行,
#include <iostream> using namespace std;其他的跟C语言差不多,#include是一个宏(mocro)预编译处理器指令(preprocessor directive),他告诉编译器这个程序要用到的头文件,所以在这个程序中就可以换用到这个头文件中包含的一些函数(function)与类(class or struct);
第二行是一个新程序的标头写法,using知名表示使用名称空间(namespace)std下的名称。
还可以在C++中使用C语言中的一些库,只要把之前的写法这样改:match.h -> cmath,但是这种库的混用是不建议的。
ok,main函数中的三行cout语句很简单,与C语言中的printf类似,不过用法比较简单,这里就不多说了。
1.2 C++中的数据类型
程序在执行过程中,需要运算许多的数据,也需要存储许多的数据,数据是存储在内存空间的,由于各数据的类型不同,在存储时所需的容量也不同,不同的数据类型给予不同的存储空间来存储,因而有了数据类型(data type)。
在C++中基本的数据类型主要有:整数(integer),浮点数(float),字符(character)而这些又可以进行细分:
整数
用来表示整数值,可分为shot、int与long,可容纳的大小不相同,shot的长度为半个word,int表示一个word,而long表示一个或者2个word,在32位机器上面int与long的程度通常是相同的,长度越长表示的整数值范围越大。
浮点数
用来表示小数值,可以区分为float、double与long double,float的长度为一个word,double为2个word,long double长度为3或者4个word。
字符
用来存储字符,长度为一个字符,字符编码主要依据ASCII表而来,由于字符占得空间比较小,所以可以用来存储较小范围的整数
以上的数据类型在memory中占有的大小跟CPU有关,在这里给个例子,它可以告诉你确切占用的大小。
#include <iostream> using namespace std; int main() { cout << "\ndata type size(bytes)"; cout << "\nint\t" << sizeof(int); cout << "\nlong\t" << sizeof(long); cout << "\nfloat\t" << sizeof(float); cout << "\ndouble\t" << sizeof(double); cout << "\nchar\t" << sizeof(char)<<endl; return 0; }我们使用sizeof这个函数来取得数据类型的大小,执行下程序:
data type size(bytes)
int 4
long 4
float 4
double 8
char 1
看到如上结果,CPU平台不同执行的结果会不同,如上例中整数int的内存空间是4个字节,所以他可以存储的整数范围是-2147483648到2147483647,如果存储值超过这个范围的话称为溢出值(Overflow),会造成不可预计的结果。
整数计算范围的方式很简单,例如int占据4个字节的话,可存储范围为2^32/2,除以2是因为要分一半给负值,其他类似。
C++中还有bool类型,用来便是布尔数,在程序中占一个bit,用以使用true和false常量来表示,可以使用上面的例子来测试bool类型数据占用的存储空间。
1.3 数字常量
我们可以再程序中写下1、10、678这样的数值,这些数值称为(liternal constant),预设程序中如果写下一个整数值,例如1这个数值的话,定义为int类型的无正负号的数值,而如果在程序中写下1.0,3.14等小数时,定义为double类型的数值。
整数数字常量可以用8进制,十进制,十六进制数来表示,一般习惯使用十进制,如果我们用八进制的数字常量,开头加上0就可以了,如果要使用十六进制的字面常量,开头加上0x,例如下面的程序:
#include <iostream> using namespace std; int main() { cout << 26 << "\n"; // 10進位 cout << 032 << "\n"; // 8進位 cout << 0x1A << "\n"; // 16進位 return 0; }由于cout输出整数值时,都会以10进制显示,所以上面的程序中三行都会显示26。我们可以再整数值以后加上L或者l,表示该整数值要是long类型,因为l容易与数字1搞混,通常使用L,我们也可以指定为无符号整数,可使用U或者u来指定。
下表列出常用的escape sequence:
escape sequence | 說明 |
\n | 換行、新行(newline) |
\t | 水平定位點(horizontal tab) |
\v | 垂直定位點(vertical tab) |
\b | 退回一格(backspace) |
\r | 返回(carriage return) |
\f | 換頁(formfeed) |
\a | 嗶聲(alert bell) |
\\ | 倒斜線(backslash) |
\? | 問號 |
\' | 單引號 |
\" | 雙引號 |
1.4 变量
数字常量 存储在内存中,并与一个数据类型相关系,现在的问题是如果我们要将一个数值存储在内存中,并在之后取回这个数值来使用,那我们要怎么去最呢?显然我们无法取得刚才写下的那个数值,因为没有任何关于关于那个数值的存储地址的信息。
变量(variable)提供一个有名字的存储空间大小:变量本身的值是指存储在内存中的某个数值,我们可以透过变量的名称来取得这个数值,这个数值又被称为rvalue或者read value,而变量的地址值是指这个数值存储在内存中的地址,变量本身又被称为lvalue或者location value。
在C++中药使用变量,必须先声明变量的名称和数据类型,例如
int num;
double num2;
如上面的例子,我们使用int、float等关键字来声明变量数名称并且指定变量的数据类型,变量在命名时有一些规则,真不可以用数字作为关键字开沟,也不可以使用一些特殊字符,而且不可以喝C++中的关键字同名。
变量的命名风格我觉得因人而异,自己习惯就好。
下面还是来举个例子吧:
#include <iostream> using namespace std; int main() { int ageForStudent; double scoreForStudent; char levelForStudent; cout << "\n年級\t得分\t等級"; cout << "\n" << ageForStudent << "\t" << scoreForStudent << "\t" << levelForStudent << "\n"; ageForStudent = 5; scoreForStudent = 80.0; levelForStudent = 'B'; cout << "\n年級\t得分\t等級"; cout << "\n" << ageForStudent << "\t" << scoreForStudent << "\t" << levelForStudent << "\n"; return 0; }
在程序中第一次只是声明了变量并没有给赋值,所以打印出来的是随机数。
也可以使用如下的方法声明,此方法会调用构造函数,所以变量会被初始化为0:
int age = int();
。。。
1.5 终端的输入输出
终端的输入输出我认为只是用来做调试的,这部分很简单,比C语言中的printf简单多了,大家可以自行练习。
未完待续。