對指針加一或者減一并不是簡單的加減運算,而是以基類型數(shù)據(jù)所占有的字節(jié)數(shù)為步長的,例如下面:float a[10],*p;p=&a[4];既指針變量p指向了數(shù)組a中下標為4的元素。假如p=2000,那么p+1=2004而不是2001,且p+1指向的是a[5],p+3=2012,p+3指向的是a[7],p+3-p=12。但是兩個指向同一個數(shù)組的指針變量是可以進行大小比較的,兩個指針相減,得到的數(shù)據(jù)是兩個指針之間的元素個數(shù)。如果我將以上例子做如下改變float a[10],*p,*q;p=&a[4],q=&a[7];那q-p=2(a[4]與a[7]之間有兩個元素)與第一個式子p+3-p=12矛盾?。?!請高人指點我的理解哪里錯了
3 回答

ABOUTYOU
TA貢獻1812條經驗 獲得超5個贊
嗯,沒錯,對指針的加減運算是以步長為單位的,不過這是對編譯器來講的。但是對于機器來講,指針也是二進制數(shù)據(jù),在機器內對它們進行運算和一般的數(shù)據(jù)是一樣的,只是因為編譯器知道它們是指針,所以編譯器告訴你的是指針之間的步長。以下是一個測試的程序,應該能說明問題吧,僅供參考:
#include<stdio.h>
#include<stdlib.h>
void main()
{
float a[10],*p,*q;
p=&a[4];
q=&a[7];
printf("p: 0x%0xd\n", p);
printf("q: 0x%0xd\n", q);
printf("p-q: %d\n", p-q);
printf("p+3-p: %d\n", p+3-p);
system("pause");
}
- 3 回答
- 0 關注
- 1052 瀏覽
添加回答
舉報
0/150
提交
取消