C語言中指針有哪些運(yùn)算 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(我這邊的街道地址是連續(xù)的偶數(shù))。那么我鄰居的房子就是我房子前面的(124-118)/2(或3)房子(我鄰居的房子和我的房子分開兩個(gè)房子,即120和122)。指針之間的減法與上述方法相同。
指針是整數(shù)嗎,若不是整數(shù),指針為什么可以進(jìn)行加減運(yùn)算?
指針是可以減去的十六進(jìn)制地址。P2是buf[3]的地址;P1是buf[1]的地址;因?yàn)槭钦麛?shù)數(shù)據(jù),一個(gè)整數(shù)是4字節(jié),P2-P1=(P2指向的地址-P1指向的地址)/sizeof(int)P1和P2的差是2個(gè)整數(shù),即8字節(jié);第二種方法相當(dāng)于將地址轉(zhuǎn)換成10個(gè)基數(shù)并進(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,則直接打印地址時(shí)可以看到8字節(jié)的差異。)