第三章
数据类型
- 128u 无符号数 128 1024U 无符号数1024 u大小写均可 1L long 形 1 8Lu 无符号long型 8 垂直制表符 /v 宽字符 wchar_t L'a'
变量
- .对象名一般用小写字母例如我们往往写成index 而不写INDEX 一般把Index 当作类型名而INDEX 则一般被看作常量值通常用预处理器指示符#define 定义 .标识符一般使用助记的名字——即能够对程序中的用法提供提示的名字如 on_loan 或salary 至于是应写成table 还是tbl 这纯粹是风格问题不是正确性的 问题 .对于多个词构成的标识符习惯上一般在每个词之间加一个下划线或内嵌的每 个词第一个字母大写例如一般会写成student_loan 或studentLoan 而不是 studentloan 我在这里已经列出了所有三种形式一般有面向对象背景的人 ObjectOrientedBackground 喜欢用大写字母而有C 或过程化背景的人 C_or_procedural_background 则喜欢下划线再次说明使用isa isA 或is_a 只是个风格问题与正确与否无关 一个简单的定义指定了变量的类型和标识符它并不提供初始值如果一个变量是在全局域global scope 内定义的那么系统会保证给它提供初始值0 如果变量是在局部域local scope 内定义的或是通过new 表达式动态分配的则系统不会向它提供初始值0 这些对象被称为是未初始化 的uninitialized 未初始化的对象不是没有值而是它的值是未定义的undefined C++支持两种形式的初始化第一种形式是使用赋值操作符的显式语法形式 int ival = 1024; string project = "Fantasia 2000"; 在隐式形式中初始值被放在括号中 int ival( 1024 ); string project( "Fantasia 2001" );
指针类型
-
在下面的例子中lp 是一个指向long类型对象的指针而lp2 则是一个long 型的数据对象不是指针
long *lp, lp2;
当程序员后来想定义第二个字符串指针时他会错误地修改定义如下
// 喔: ps2 不是一个字符串指针
string* ps, ps2;
void* 类型指针它可以被任何数据指针类型的地址值赋值函数指针不能赋值给它
// ok: void* 可以持有任何指针类型的地址值
void *pv = pi;
pv = pd;
指向指针的指针,例子
#include <iostream> using namespace std;指针加2 意味着给指针持有的地址值增加了该类型两个对象的长度例如假设一个char 是一个字节一个int 是4 个字节double 是8 个字节那么指针 加2 是给其持有的地址值增加2 8 还是16 完全取决于指针的类型是char int 还是double
int main(){ int a=20; int *p=&a; cout<< " a: "<<a<<endl<< "*p: "<<*p<<endl; int **pp=&p; // &p 指向指针的地址 cout<< "**pp:"<<**pp<<endl; //两次解引用 return 0; } 字符串类型
- 转换 string 为 C-style 字符串: const char *str=string1.c_str() ^^^^^
const 限定修饰符
- const int bufSize = 512 // 缓冲区大小 可以防止这种错误: if ( bufsize = 0 ){...} const double *cptr; cptr 是一个指向double 类型的const 对象的指针我们可以从右往左把这个定义读为 cptr 是一个指向double 类型的被定义成const 的对象的指针此中微妙在于cptr 本 身不是常量我们可以重新赋值cptr 使其指向不同的对象但不能修改cptr 指向的对象 不能修改 const 指针所指向的值 char *str="llll"; const char *p=str; *p='4';//不正确
引用类型
- int ival = 1024; int *pi = &ival; // ok: refPtr 是一个指向指针的引用 int *&ptrVal2 = pi; 一旦引用已经定义它就不能再指向其他的对象 double dval = 3.14159; // 仅对于const 引用才是合法的 const int &ir = 1024; const int &ir2 = dval; const double &dr = dval + 1.0;
布尔类型
枚举类型
- enum enumtest{a,b,c,d} enum enumtest2{a=1,b=3} >>END<< //