* 在看指针的时候最好是从右往左看;
指针就是地址,地址就是指针;
一个变量的指针包含两个方面的含义:
1.以储存单元编号表示的地址;
2.指向的存储单元的数据类型(int , double , char , float),即基类型;
例子:
string s("hello word");
string *sp = &s;
//sp holds the address of s;
第二条语句是定义了一个指向string 类型的指针sp,并初始化sp使其指向string 类型的对象s;
"&"是取地址符(
address of);
"*"是解引用符;
在VisualC++当上,每一个指针变量分配4个字节的存储空间。对指针变量必需将他定义为指针类型。
例子:
Int i, j; //定义整形变量i,j;
Int * Pointer_4; //定义指针类型pointer_4;
第二行当中的Int是:
所定义的指针变量是指向整数数据指针变量;pointer_4当中只能存放int类型(整数变量或是整型数组元素)的地址;不能存储其他类型的地址;
int是这个指针的基类型;Pointer_4的基类型是int型;
***** 指针变量的基类型就是该指针变量指向的变量的类型;
指针变量的一般形式为:
基类型 * 指针变量名;
在变量名前加一个:“*”表示该变量是指针变量;
*在定义指针变量时必需指定指针的类型;
2.指针的定义与初始化:
(1).指针的定义:
每个指针都有一个与之关联的数据类型,该数据类型决定了指针所指向的对象的类型;
如:
一个Int型的指针只能指向int对象;
vector(int)
*pvec
;
//pvctor cna point to a vector<int>;
int
*ip1, *ip2
;
//ip1 and ip2 can point to can int;
string
*pstring
;
// pstring can point to a string;
double
*dp
;
//dp can point to a double ;
(2).指针可能取的值:
1.保存一个特定对象的地址;
2.指向某对象的后面的另一个对象;
3.指针的值为0;当指针的值为0时,表明这个指针不指向任何一个对象;
(3).指针的初始化:
1.未初始化的指针有哪些特点:
未初始化的指针就如未初始化的变量一样,它会使程序崩溃;
如果可能的话,除非所指向的对象已经存在,否则不要先定义指针,这样可避免定义一个未初始化的的指针。
如果必需分开定义指针和其所指向的对象,则将指针初始化为0,因为编译器可检测出0值的指针,程序可判断该指针并未指向一个对象;
指针初始化和赋值操作的约束:
1.0值常量表达式;在编译时可获得0值的整数const对象或字面值常量0;
2.类型匹配的对象的地址;
3.另一个对象之后的下一地址;
4.同类型的另一个有效指针;
void *指针:
void*指针表明该指针与一个地址相关,但是不清楚储存在此地上的对象的类型;
void支持的有限类型:
1.与另一个指针进行比较;向函数传递void*指针或从函数返回void*指针;给另一个void指针赋值;不允许使用void*指针操纵它所指向的对象;