1 指针
指针是一个变量,其存储的是值的地址。为找到常规变量的地址,需对变量应用地址运算,就可获得他的位置。使用常规变量时,值是指定的量,而地址为派生量。指针的策略与之相反,将地址视为指定的量,而将值视为派生量。因此,指针名表示地址,*运算符称为间接值或解除引用运算符,将其应用指针,可以得到地址处存储的值。对指针解除引用的方法是对指针应用*或者用数值表示法,所以如ptr[0]与*ptr是一样的。
声明指针:int *ptr; 初始化指针: int a=5;ptr= &a;。注意:1)int* p1,p2;创建了一个指针p1,一个int变量p2,所以对每个指针变量名,都需要使用一个*,int*是一个复合类型,是指向int的指针。2)创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。如long * fellow; *fellow = 199999;是一种危险的操作。没有将地址赋给fellow,那199999放在哪里?程序都将它解释为存储199999的地址,如果fellow的值恰巧为1200,计算机将数据存在地址为1200上,即使是程序代码的地址。3)不能简单地将整数赋给指针,应通过强制类型转换为数字转换为适当的地址类型。
使用new来分配内存:指针最大的用处,在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。在c中,可以用malloc()来分配内存,在c++中仍可以这样做,但new运算符更好。如int *pn = new int;。变量pn的值存储在栈的内存区域中,而new在堆的内存区域分配内存。
使用delete释放内存:如int *pn = new int; ... delete pn;使用delete时,后面加上指向内存块(只能是new分配的地址,这也是使用delete的关键)的指针。注意:1)释放pn指向