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

2021-10-17 20:35:39 字數 796 閱讀 3786

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 dword ptr [a]

,eax

執行完陣列位址相減運算後,還會執行算數右移指令,右移位數視引數型別而定,如int型右移2位,short型右移1位。都知道右移1位相當於除以2操作,右移2位等同於除以4。由此可見,兩個陣列元素位址相減,實際是獲取兩個元素陣列元素的距離,而不是位址的距離。

對於陣列有這種現象,那麼其他型別的變數是否在取址相加減後,會不會根據資料型別而進行右移》操作;

兩位址相隔4個位元組,而運算得到了-1的結果。

兩個元素的位址相減,編譯器會根據變數的資料型別來對結果進行右移操作,即結果是兩個元素間(包括兩個元素間的乙個元素)有多少個元素,而不是位址的距離

C語言 位址相減

舉乙個小例子說明一下,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語言中的...

C語言中的變數

開場白要吸引人.但是我不會 有人說我可以靠臉吃飯。可我偏偏選擇了手,哈哈哈 說笑 娛樂娛樂,下面我就來提提c語言中關於變數的意思 什麼是變數?沒錯 你看字面意思就可以理解,就是可以變得量,用專業一點的話就是程式中其值可以變化的量。變數有三個基本要素 變數名 每乙個變數都應該有乙個名字。變數的資料型別...

C語言中變數屬性

事物的難度遠遠低於對事物的恐懼!這章來聊聊變數的屬性,玩過遊戲的朋友都知道,遊戲裡各個角色都有各自特定的屬性,才有了各個角色的功力不同,這個只能打小妖而那個卻能戰大怪,這就因為它們具有不同的屬性。而在c語言中,變數也可以有自己的屬性,屬性不同,變數的在程式中具有的特性也不同。那麼如何給變數加上自己的...