c 判斷兩個結構體內容相等 不能通過記憶體判斷

2021-08-03 11:26:23 字數 677 閱讀 7472

結構體

typedef struct a  a;
a結構體為8位元組, short_num自動補齊到4位元組,

而多餘的2個位元組,不會自動置為0

如:

#include typedef struct a  a;

int main()

通過gcc -s得到彙編**:

subq    $16, %rsp

movw $3, -16(%rbp)

movl $3, -12(%rbp)

其中movw是16位, movl是32位,其中均是將3賦值,但是中間沒有任何置0的操作。

另通過gdb檢視

(gdb) x/8xb &a

0x7fffffffdbc0: 0x03 0x00 0xff 0xff 0x03 0x00 0x00 0x00

系統環境為小端:因此這裡的short_num對應的為 0x03 0x00

0xff 0xff, 可見補齊的兩個位元組並沒有置0,還有可能是其他的數值

因此對於有補齊型別的結構體,其是不能通過判斷記憶體儲存的值是否相等而判斷兩個結構體是否相等的。

在實現map的key時可能更需要注意到這點。

判斷兩個物件內容值是否相等

現在有兩個物件 let a let b 如何判斷物件a和物件b相等呢?a b falseobject.is a,b false 這個時候需要自己定義乙個方法來判斷物件內容值是否相等,如下 function objequal a,b for let key in a if a key b key re...

判斷兩個物件內容相等與equals方法

判斷兩個物件內容相等 不能直接呼叫object類裡的equals方法,將equals方法寫到object類當中是讓所有物件都擁有equals方法,它的目的是給開發者重寫的,不然其方法實現的功能與 一模一樣 而用 號是不能判斷兩個物件內容相等的 eg.user a new user user b ne...

判斷兩個實數是否相等

題目描述 1.輸入a,b字串,並得到長度 2.設定bool變數,用於標記a,b是否含有小數點 3.若a,b中不含有小數點,則給不含小數點的字串的末尾加上小數點 4.現在兩個數都含有小數點,則需要在短的那個數上面小數點後面補0 5比較兩個字串是否相同,相同print yes include inclu...