#include
#include
#include
using
namespace std;
intmain()
;char
*p=a;
printf
("p=%p\n"
,p);
printf
("p+1=%p\n"
,p+1);
int b=
;int
*q=b;
printf
("q=%p\n"
,q);
printf
("q+1=%p\n"
,q+1);
return0;
}
執行結果
char佔乙個位元組,所以p到p+1位址移動一位
int佔四個位元組,所以p到p+1位址移動四位
p到p+1移動的是乙個p指向的sizeof(「p指向的型別」)
#include
#include
#include
using
namespace std;
intmain()
;char
*p=&a[0]
;char
*p1=
&a[5];
printf
("p=%p\n"
,p);
printf
("p1=%p\n"
,p1)
;printf
("p1-p=%d\n"
,p1-p)
;int b=
;int
*q=b;
int*q1=
&b[6];
printf
("q=%p\n"
,q);
printf
("q1=%p\n"
,q1)
;printf
("q1-q=%d\n"
,q1-q)
;return0;
}
執行結果:
根據q1和q位址16進製制下位址的值做相減,可得10進製下24,但最後輸出的是6
實際上指標位址相減後還會除以sizeof(「指向型別」)
指標運算優先順序比「+」高,所以要用*(p+1)
但是指標的運算優先順序比「++」小
**示例:
可以發現,指標已經向後移動了乙個sizeof(),「++」運算比指標高
之所以元素值還是第乙個元素是因為「++」在p的後面,它要執行完了再++
如下就是先++
#include
#include
#include
using
namespace std;
intmain()
;int
*p; p=
&a[0];
printf
("address p=%p\n"
,p);
printf
("p[0]=%d\n",*
++p)
;printf
("address p=%p\n"
,p);
/* int b=;
int *q=b;
int *q1=&b[6];
printf("q=%p\n",q);
printf("q1=%p\n",q1);
printf("q1-q=%d\n",q1-q);
*/return0;
}
執行結果:
如果是「+」,那指標的運算優先順序更高,如下
#include
#include
#include
using
namespace std;
intmain()
;int
*p; p=
&a[0];
printf
("address p=%p\n"
,p);
printf
("p[0]=%d\n"
,*p+1)
;// *先運算
如上就是*先運算,先取出值再+1
指標的運算
指標運算 指標演算法並不依賴於指標的型別,如果p是乙個指向char的指標,那麼p 1就指向下乙個char 算術運算 指標的算數運算只限於兩種形式 指標運算只有用於陣列中其結果才是可以 的,對於任何並非指向陣列元素的指標執行算數運算其結果是非法的 1.指標 整數 結果也是指標 這種形式只能用於指向陣列...
指標的運算
指標的運算包括 1 指標的加法 2 指標的減法 char short int long long long float double 位元組數 1 2 2 4 4 8 4 8 int不加說明為4個位元組 對指標的加法而言 指標是不能加指標的 它只能加乙個數字 比如 指標 1 加乙個單元格 需要調整 ...
指標的運算
include int main int p arr p 10 p p 20 printf d,08x n arr 0 arr 1 return 0 指標 1的含義,首先思考一下指標 1可能的幾個含義 1 加整個陣列 這種含義不太符合實際,題中要的是遍歷陣列中的數。如果是加整個陣列,那就是直接跳過去...