指針的加減運(yùn)算實(shí)質(zhì)上是 C語言指針可以相減嗎?為什么?
C語言指針可以相減嗎?為什么?如果兩個(gè)指針向同一個(gè)數(shù)組,它們就可以相減,其為結(jié)果為兩個(gè)指針之間的元素?cái)?shù)目。仍以本章開頭介紹的街道地址的比喻為例,假設(shè)我住在第五大街118號(hào),我的鄰居住在第五大街124號(hào)
C語言指針可以相減嗎?為什么?
如果兩個(gè)指針向同一個(gè)數(shù)組,它們就可以相減,其為結(jié)果為兩個(gè)指針之間的元素?cái)?shù)目。仍以本章開頭介紹的街道地址的比喻為例,假設(shè)我住在第五大街118號(hào),我的鄰居住在第五大街124號(hào),每家之間的地址間距是2(在我這一側(cè)用連續(xù)的偶數(shù)作為街道地址),那么我的鄰居家就是我家往前第(124-118)/2(或3)家(我和我的鄰居家之間相隔兩家,即120號(hào)和122號(hào))。指針之間的減法運(yùn)算和上述方法是相同的。
指針是整數(shù)嗎,若不是整數(shù),指針為什么可以進(jìn)行加減運(yùn)算?
指針是16進(jìn)制的地址,可以進(jìn)行減法。p2指向的是buf[3]的地址;p1指向的是buf[1]的地址;因?yàn)槭钦蛿?shù)據(jù),所以一個(gè)整型是4個(gè)字節(jié),p2-p1=(p2指向的地址-p1指向的地址)/sizeof(int)p1與p2地址之間差2個(gè)整型即8個(gè)字節(jié)大??;第二個(gè)等于是將地址轉(zhuǎn)化為10進(jìn)制然后在相減,故得數(shù)為8;inta[10]int*p1=&a[1]int*p2=&a[3]printf("%ldn",p2-p1)printf("%dn",(int)p2)printf("%dn",(int)p1)打印出轉(zhuǎn)成int型的地址,(不轉(zhuǎn)int,直接打印地址也可以看出來相差8個(gè)字節(jié))
兩個(gè)相同類型的指針變量可以做相加減運(yùn)算嗎?
應(yīng)該選擇C。A選項(xiàng)兩個(gè)同類型的指針間可以比較大小,比較原則應(yīng)該是按照實(shí)際內(nèi)存的高低位比較的。B選項(xiàng)賦值,這個(gè)當(dāng)然是可以的了。D選項(xiàng)兩個(gè)相同指針變量相減可以獲得在之間相隔的同類型元素個(gè)數(shù)。