概念:
指针提供了一种较为直观的地址操作的手段,正确的地使用指针,可以方便、灵活而有效地组织和表示复杂的数据。
地址与指针:
地址:当定义一个变量后,内存中将会划出一块由若干个存储单元组成的区域,用于保存该变量的数据。举一个简单的例子:把一栋楼比作是一个变量,那么地址就是每一家的门牌号。
指针:是一种用于存放内存单元地址的变量类型。例子:居委会中有附近居民的全部信息(门牌号),就可以把居委会看作是一个指针。
指针变量:
定义指针变量的格式:数据类型 * 变量名; 例:
<span style="font-size:18px;">int * ip; //定义了一个int型的指针变量IP</span>
指针常量:指针常量:如果在定义指针时,指针前用const修饰,被定义的指针就变成了一个指针类型的常量。相对于指针变量而言,也就是指针值不能被修改的指针。即上述例子中的居委会内的资料不能改变,但是每户里面住的人可以改变。类型如下:
数据类型 * const 指针名 =变量名;
1.修饰符const与指针变量紧邻,说明指针的值不允许修改,所以一定要在定义时给出初值。如
int * const p = &a;
2.因为const修饰的是指针,而不是指针指向的对象的值,所以指针指向的对象的值可以被修改。如
* p =4
常量指针:
常量指针:如果在定义指针变量的时,数据类型前用const修饰,被定义的指针变量就是指向常量的指针变量,指向常量的指针变量简称常量指针。即上述例子中的居委会的资料可以改变,但是每一户里面居住的人不能改变。类型如下:
const 数据类型 * 指针变量 = 变量名;
或
数据类型 const * 指针变量 =变量名;
1.定义一个常量指针后,指针指向的对象的值不能被修改,即不能通过指针来更改所指向的对象的值,但指针本身可以改变,指向另外的对象。
2.因为const修饰的是指针指向的值,而不是指针,所以指针指向的值不能被更改。
3.为了防止通过一个非常量指针修改常量指针指向的值,将一个常量指针赋给一个非常量指针时错误的
4.可以将一个非常量指针赋给一个常量指针
5.const用在数组的类型前修饰数组元素,数组元素为常量的数组的称为常量数组,常量数组的元素不可改变,也不可将地址赋值给非常量指针。
指向常量的指针常量:
指针常量保护指针的值不被修改,常量指针保护指针指向的值不被修改,为了将两者同时保护,可以定义指向常量的指针常量,简称为常指针常量。如上述例子中的住户和居委会的信息都不能改变。类型如下:
const 数据类型 * const 指针变量=变量名;
或
数据类型 const * const 指针变量 = 变量名;
1.左边的const与数据类型相结合,表明数据的值是常量;右边的const用在变量前,表明变量的值是常量。
2.定义一个常指针常量后,修改指针的值与修改指针指向内容的值都是错误的。
注意:
常指针类型通常用作函数的形参,以防止在函数体内通过形参修改实参指向的值,以保护实参。
总结:
指针时C++语言最重要的特性之一,也是C++的主要难点,从某种程度上而言,如果不能深刻地理解指针的概念,正确而有效地掌握指针,就不可能真正学好C++。所以,对我而言,指针这一块还需要更进一步的学习……