1. 程式人生 > >C語言再學習7-結構體

C語言再學習7-結構體

為什麼使用結構體?

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

在彙編裡,根本無法分辨是結構體還是普通變數 !

結構體指標:暫無