首页 > 编程 > C++ > 正文

简单分析C++指针的操作和运算

2020-05-23 14:17:28
字体:
来源:转载
供稿:网友

这篇文章主要介绍了简单分析C++指针的操作和运算的相关资料,需要的朋友可以参考下

既然指针是一种数据类型,那么它也应该有对应的操作或运算,正如整数能做加减乘除一样。但是每一种操作或运算都应该对这种数据类型有意义。比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运算,因为比较虚数的大小是没有意义的。

对于指针类型来说,可以使用的运算有:和整数做加法运算、和整数做减法运算、两指针做关系运算。很显然,指针类型的乘除法是没有意义的,也是不允许的。

指针的加减运算

指针的加减法和数的加减法是不同的。我们认为,指针只能够和整数做加减法运算(包括和整型常量、变量做加减法和自增自减)。其实这也不难理解,内存的存储空间是按“个”计算的,不会出现半个存储空间的情况。那么,指针的加减法是否在地址值上做加减呢?我们先写一段程序来验证一下指针加减法的运算结果:(程序8.3)

 

 
  1. #include "iostream.h" 
  2. int main() 
  3. int a[5]={1,2,3,4,5}; 
  4. int *aptr=&a[0];//把数组首元素的地址给指针 
  5. int i=1; 
  6. for (int j=0;j<5;j++) 
  7. cout <<'(' <<aptr <<")=" <<*aptr <<endl;//输出指针内存储的地址和该地址的数据 
  8. aptr=aptr+i;//指针和整型变量做加法 
  9. return 0; 

运行结果:

 

 
  1. (0x0012FF6C)=1 
  2. (0x0012FF70)=2 
  3. (0x0012FF74)=3 
  4. (0x0012FF78)=4 
  5. (0x0012FF7C)=5 

我们发现,每次做了加法以后,地址值并不是相差1,而是相差了4。所以指针和整数做加法并不是简单地将地址值和整数相加。我们又发现,每次做了加法以后,能够输出原先指针所指的下一个元素。根据数组在内存中的存储情况我们不难得出这样一个结论:指针和整数C的加减法是指针向前或向后移动C个对应类型的存储区域,即可以得到以下公式:

新地址=旧地址±C*每个对应数据类型的变量在内存中所占字节数

因为每个int变量在内存中所占字节数为4,所以在程序8.3.1中每做完一次加法,新地址=旧地址+1*4=旧地址+4。如右上图8.3所示。

指针的关系运算

我们知道关系运算有等于、大于、小于、大于等于、小于等于和不等于六种。对于指针来说,等于和不等于就是判断两个指针的值是否相同或不同,即两个指针是否指向了相同或不同的地方。而大于和小于是判断指针的值哪个大哪个小。值较小的在存储器中的位置比较靠前,值较大的在存储器中的位置比较靠后。

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表