程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 簡略剖析C++指針的操作和運算

簡略剖析C++指針的操作和運算

編輯:關於C++

簡略剖析C++指針的操作和運算。本站提示廣大學習愛好者:(簡略剖析C++指針的操作和運算)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略剖析C++指針的操作和運算正文


既然指針是一種數據類型,那末它也應當有對應的操作或運算,正如整數能做加減乘除一樣。然則每種操作或運算都應當對這類數據類型成心義。好比兩個實數可以用關系運算得知哪一個年夜哪一個小,而兩個虛數卻不克不及應用關系運算,由於比擬虛數的年夜小是沒成心義的。

  關於指針類型來講,可使用的運算有:和整數做加法運算、和整數做減法運算、兩指針做關系運算。很明顯,指針類型的乘除法是沒成心義的,也是不許可的。

指針的加減運算

  指針的加減法和數的加減法是分歧的。我們以為,指針只可以或許和整數做加減法運算(包含和整型常量、變量做加減法和自增自減)。其實這也不難懂得,內存的存儲空間是按“個”盤算的,不會湧現半個存儲空間的情形。那末,指針的加減法能否在地址值上做加減呢?我們先寫一段法式來驗證一下指針加減法的運算成果:(法式8.3)

#include "iostream.h"
int main()
{
  int a[5]={1,2,3,4,5};
  int *aptr=&a[0];//把數組首元素的地址給指針
  int i=1;
  for (int j=0;j<5;j++)
  {
   cout <<'(' <<aptr <<")=" <<*aptr <<endl;//輸入指針內存儲的地址和該地址的數據
   aptr=aptr+i;//指針和整型變量做加法
  }
  return 0;
}

運轉成果:

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

  我們發明,每次做了加法今後,地址值其實不是相差1,而是相差了4。所以指針和整數做加法其實不是簡略地將地址值和整數相加。我們又發明,每次做了加法今後,可以或許輸入本來指針所指的下一個元素。依據數組在內存中的存儲情形我們不可貴出如許一個結論:指針和整數C的加減法是指針向前或向後挪動C個對應類型的存儲區域,便可以獲得以下公式:
    新地址=舊地址±C*每一個對應數據類型的變量在內存中所占字節數

  由於每一個int變量在內存中所占字節數為4,所以在法式8.3.1中每做完一次加法,新地址=舊地址+1*4=舊地址+4。如右上圖8.3所示。

指針的關系運算

  我們曉得關系運算有等於、年夜於、小於、年夜於等於、小於等於和不等於六種。關於指針來講,等於和不等於就是斷定兩個指針的值能否雷同或分歧,即兩個指針能否指向了雷同或分歧的處所。而年夜於和小因而斷定指針的值哪一個年夜哪一個小。值較小的在存儲器中的地位比擬靠前,值較年夜的在存儲器中的地位比擬靠後。

以上所述就是本文的全體內容了,願望年夜家可以或許愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved