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語言中,變數也可以有自己的屬性,屬性不同,變數的在程式中具有的特性也不同。那麼如何給變數加上自己的...