C語言 位址相減

2021-06-19 19:30:05 字數 486 閱讀 4122

舉乙個小例子說明一下,c中位址相減的結果是比較有趣的。

例:int a[3];

int *s1,*s2;

char *t1,*t2;

a[0]=1;a[1]=2;a[2]=3;

s1=a;

s2=&a[2];

s2-s1=?

t1=(char*)a;

t2=(char*)&a[2];

t2-t1=?

解析: s2-s1=2;  

t2-t1=8;why?

c語言中的位址相減,其實並不是,我們想象中的直接相減的結果就是答案。其實,結果還和減數與被減數有關的,具體求解辦法如下公式:

((void*)paddr1 - (void*)paddr2)/sizeof(type),type即是 所指的型別。所以,如果兩個整數字址相減 ,則需要在相減的結果基礎上再除以4,所以就是2了,同理可以得出兩個char型別位址相減 結果是8。

C語言中對變數取位址相減

c語言中對變數取位址相減 int arr 10 int a arr 9 arr 0 在彙編 中 00416b87 lea eax,ebp 28h 00416b8a lea ecx,arr 00416b8d sub eax,ecx 00416b8f sar eax,200416b92 mov dwor...

C語言大數相減(考慮相減為負數情況)

同時考慮到相減之後為負數的情況和相減之後為0的情況 include include int main bb 100 cc 100 char a 100 b 100 scanf s s a,b int m,n,len,flage1 0 flage1代表相減之後是否為負數 代表用前邊那個數減後邊那個數還...

Excel位址 C語言

excel單元格的位址表示很有趣,它使用字母來表示列號。比如,a表示第1列,b表示第2列,z表示第26列,aa表示第27列,ab表示第28列,ba表示第53列,當然excel的最大列號是有限度的,所以轉換起來不難。如果我們想把這種表示法一般化,可以把很大的數字轉換為很長的字母序列呢?本題目既是要求對...