【C++学习】——指针运算

今天又认真琢磨了一下指针,并且各种问啦!收获还是满大的,所以写下来,和大家一下讨论讨论。


定义


指针就是存储地址的变量。

所以一谈到变量我们就很好说了,变量有什么?一定要有数据类型,所以在VB里学到的数据类型这里都实用。而

C++语言中又提出了一种新的数据类型定义叫“ typedef ,它的作用是什么呢?书上说的是 赋予 别名 ,说到底还是

变量的作用:把很长很复杂,并且重复次数多的数据类型用简单的词汇表示。

而指针和变量的区别在哪里?

1、“*”表示声明的变量为指针变量。

2、指针指向的为地址变量、地址或地址变量的值。

3、存储空间的为4个字节。

而指针和变量的相同点是:在使用之前都必须先赋值,再引用。


运算


指针的运算主要以书上的两个例子说明。

例1:(P118)指针与整数的加减运算

(1)int b[2][3][4];

(2)typedef char A[10];

(3)int * p1=b[1][0];

(4)int * p2=(int *)b[1];

(5)int * p3=(int *)(b+1);

(6)double * pd=(double *)p3;

(7)A * pa=(A *)p3;

(8)cout<<p1<<","<<p2<<","<<p3<<","<<pd<<","<<pa<<endl;

(9)cout<<p1+1<<"."<<p2+1<<","<<p3+1<<","<<pd+1<<","<<pa+1<<endl;

分析解释:

(1)声明了一个整型的三维数组,且数组每维的最大值分别为:2,3,4。

(2)定义了char的别名为A,它的长度为10,见A如见char。

(3)定义了一个整型指针p1,把它指向b[1][0]的首地址:b[1][0][0]。

(4)定义了一个整型指针p2,把它指向b[1]的首地址:b[1][0][0]。(int *)的作用是使得b[1]强制转化成整

型,与指针p3的数据类型相同。

(5)定义了一个整型指针p3,把它指向整型(b+1)。(b+1)=b[0]+1=b[1],与(4)同义。

(6)定义了一个双精度的指针pd,把它指向指针p3的值,即b[1][0][0]。

(7)定义了一个A型的指针pa,把它指向指针p3的值,即b[1][0][0]。

(8)输出p1,p2,p3,pd,pa。

(9)输出p1+1,p2+1,p3+1,pd+1,pa+1。因为整型int为4个字节长度,所以p1+1,p2+1,p3+1都同时增加4;而双精

度double为8个字节长度,所以pd增加8;A型为10个字节长度,所以pa增加10。


例2:(P119)指针自增、自减运算

(1)int * p,* q,a=5;

(2)p = &a;

(3)p ++;

(4)* p ++;

(5)( * p ) ++;

(6)* ++ p;

(7)++ * p;

(8)* q ++ = * p ++;

解释:

(1)声明了两个整型指针变量:* p,* q;并且给整型变量a赋值5;

(2)将指针p指向a的值5(&a表示a的地址,这里为值);

(3)指针p自增,后移4个字节(整型的字符长度为4个字节),即指向指针p存储地址的下一个地址。

(4)指针p先指向变量a,然后a后移4个字节,即移到a存储地址的下一个地址。

(5)指针p读取变量a的值5,然后使a的值自加1,即得6。

(6)指针p后移4个字节,指向p存储地址的下一个地址,然后再读取这个地址里的值。

(7)与(5)同义,同结果

(8)执行顺序:* q=* p,q ++,P ++。

PS小窍门:关于执行的顺序,++前置,先执行++,然后执行其他;++后置,先执行其他,最后执行++。


总结


指针这节花了很长时间,一点点琢磨,虽然很费时间,但是还是挺有收获的。而且在学指针之前,就不断的听到

说指针很难,看不懂,学不会。所以在开始学指针的时候就有情绪或者说心理暗示在里边,就觉得自己学不会,这也

是我指针花时间比较多的原因。这节的一些理解可能带有片面性,所以如果有异议的请留言哦。。。






评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值