C語言再學習7-結構體
阿新 • • 發佈:2018-12-12
為什麼使用結構體?
struct My
{
char name[20] = "如風斬嶽";
int age;
char addr[50] ;
int money;
double Coordinates;
//.....
};
當我們有這樣一種需求,在一個結構裡需要存放不同種類和寬度的資訊的時候,結構體應運而生 struct說明這是一個結構體,這個結構體,是一個新的型別 新的型別是結構體(包含了很多資訊),新型別的名字叫My,這個My型別和char,short,int一個級別 只要能用int的地方,就能用My(這個結構體)(區域性變數,全域性變數,引數,返回值等等) struct只是建立了一個型別,就像int一樣,你還需要int a=3;而不是int直接就能使用,同理My也要宣告
My m;
My是變數型別,m是變數名稱;定義完就可以直接使用了
printf("%s", m.name);
//因為初始化過name了
char name[20] = "如風斬嶽";
//所以直接列印的時候:
當然我們可以對這個變數m進行賦值,就像一個數組一樣
m.age = 20;
strcpy(m.addr, "重慶xxxxx");
m.money = -200;
m.Coordinates = 200.300;
通過對變數m賦值,就可以使用這個結構體了!
printf("名字:%s\n年齡:%d\n地址:%s\n...", m.name, m.age, m.addr);
My m;
00351982 8D 4D A0 lea ecx,[m]
00351985 E8 A6 FD FF FF call `main'::`2'::My::My (0351730h)
m.age = 20;
0035198A C7 45 B4 14 00 00 00 mov dword ptr [ebp-4Ch],14h
strcpy(m.addr, "重慶xxxxx");
00351991 68 3C 7B 35 00 push offset string "\xd6\xd8\xc7\xecxxxxx" (0357B3Ch)
00351996 8D 45 B8 lea eax,[ebp-48h]
00351999 50 push eax
0035199A E8 BE F8 FF FF call _strcpy (035125Dh)
0035199F 83 C4 08 add esp,8
m.money = -200;
003519A2 C7 45 EC 38 FF FF FF mov dword ptr [ebp-14h],0FFFFFF38h
m.Coordinates = 200.300;
003519A9 F2 0F 10 05 70 7B 35 00 movsd xmm0,mmword ptr [ [email protected] (0357B70h)]
003519B1 F2 0F 11 45 F0 movsd mmword ptr [ebp-10h],xmm0
在彙編裡,根本無法分辨是結構體還是普通變數 !
結構體指標:暫無