首页 > 代码库 > 【C++】--关于指针的学习笔记

【C++】--关于指针的学习笔记

1.指针的定义

指针(pointer)是指向另外一种类型的复合类型,与引用类似,指针也实现了对其他对象的间接访问。

与引用不同的几点:

1.指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。

2.指针不一定要在定义时赋初值。

note:在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

3. ...(待之后的学习实践中补充)

2.定义指针类型的方法

定义指针类型的方法是在变量名前面添加【*】星号,即将声明符写成【*d】的形式,d是变量名。

note:如果在一条语句中定义了几个指针变量,每个变量前面都必须有【*】星号这个符号。

例子:

1 int *ip1,*ip2;       //ip1,ip2都是指向int型对象的指针
2 double dp,*dp2;      //dp2是指向double型对象的指针,dp是double型对象

3.获取对象的地址

指针存放某个对象的地址,要想获取该地址,需要使用 取地址符 【操作符&】

1 int ival=42;
2 int *p=&ival;
3 //p存放变量ival的地址,或者说p是指向变量ival的指针
4 //p首先被定义为一个指向int的指针
5 //随后初始化p令其指向名为ival的int对象

除两种例外情况,其他所有指针的类型都要和它所指向的对象严格匹配

1 double dval;
2 double *pd=&dval; //正确:pd初始值是double型对象的地址
3 double *pd2=pd;   //正确:初始值是指向double对象的指针
4 
5 int *pi=pd;       //错误:指针pi的类型和pd的类型不匹配
6 pi=&dval;         //错误:pi是指向int型对象的指针,而dval是double类型对象,所以也不匹配

note:如果指针指向了一个其他类型的对象,对该对象的操作将发生错误。

4.指针值

1.指向一个对象。

2.指向紧邻对象所占空间的下一个位置。

3.空指针,意味着指针没有指向任何对象。

4.无效指针,也就是上述情况之外的值。

note:试图拷贝或以其他方式访问无效指针的值都将引发错误,编译器不负责检查此类错误。

           虽然2、3种形式的指针是有效的,但是这些指针没有指向任何具体对象,所以试图访问此类指针对象的行为是不被允许的,后果无法预计(当然现在我还不知道有什么后果=-=)

5.利用指针访问对象

如果指针指向了一个对象,则允许使用 解引用符【操作符 *】来访问该对象。

1 int ival=42;
2 int *p=&ival;  //p存放着变量ival的地址
3 cout<<*p;      //由符号*得到指针p所指的对象,输出42
4 
5 *p=0;          //由符号*得到指针p所指的对象,即可通过给*p重新赋值,达到修改变量ival的值的目的
6 cout<<*p;      //输出0

对指针解引用会得出所指的对象,因此如果给解引用的结果赋值,实际上也是指针所指的对象赋值,即:为*p赋值实际上是为p所指的对象赋值。

【C++】--关于指针的学习笔记