娓娓道來c指標 (7)指標運算,娓娓道來指標
(7)指標運算
在前幾篇文章中,我們已經見過指標運算的使用情境,並多次使用指標運算來進行驗證。這裡我們來特別地總結下,指標運算的本質含義。
在c語言中,假設p、pa、pb都是某種類型的指標,這樣的運算被稱為指標運算:
其本質是1.。2.,得到的是邏輯儲存單元數,而不是簡單的物理位元組數。代碼驗證
int main(void){int array[] = {1, 2, 3};int *pa = array;int *pb = array + 3;printf("sizeof(pa)...%d\n", sizeof(pa));printf("pb-pa...%d\n", pb - pa);printf("((unsigned)pb-(unsigned)pa)/sizeof(pa)...%d\n", ((unsigned)pb - (unsigned)pa) / sizeof(pa));return 0;}運行
當然,把pa-pb解釋成((char*)pa-(char*)pb)/sizeof(pa)也是可以的。
指標運算總結指標儲存的是地址,地址本質是一個unsigned類型的整數,對於p+1,並不是簡單的把p的值往前移動一個位元組。一句話:
指標運算緊緊依賴於指標的類型。所以指標運算中,清楚指標的類型是重要的。這也是為什麼:可以用指標運算來測試指標類型。
必須指出,pa+pb這樣的運算是不存在的!
專欄目錄:C指標
C語言指標自增自減運算
#include <stdio.h>
main()
{
int a[]={1,2,3,4,5};
int *p=NULL;
p=a;
printf("%d,",*p); //p=a,取出1
printf("%d,",*(++p)); //p=a+1,取出2
printf("%d,",*++p); //p=a+2,取出3
printf("%d,",*(p--)); //先取出3,後p-1=a+1
printf("%d,",*p++); //先取出2,後p+1=a+2
printf("%d,",*p); //取出3
printf("%d,",++(*p)); //取出3,3+1=4
printf("%d,",*p); //確實是4,但不知原因
getch();
}
,*(++p)和*++p沒有多大區別
我的驗證
%d,P值
1,1245036
2,1245040
3,1245044
3,1245040
2,1245044
3,1245044
4,1245044
4,1245044
Press any key to continue
c語言中指標加減問題,解答
首先:
float a[10],*p,*q;
p=&a[4],q=&a[7];
那q-p=2(a[4]與a[7]之間有兩個元素) ***這裡就不對了,q-p = 3 不是等於2,
可以用printf("%d",q-p);看看。
p+3-p = 12 是地址按“位元組”排列的位置差,表示p+3和p之間有12個位元組
q-p = 3 表示q和p之間有3個float類型的資料,每個佔4位元組,3x4 = 12 和上面的結果一致