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 [__real@406909999999999a (0357B70h)]  
003519B1 F2 0F 11 45 F0       movsd       mmword ptr [ebp-10h],xmm0  

在汇编里,根本无法分辨是结构体还是普通变量 !



结构体指针:暂无

猜你喜欢

转载自blog.csdn.net/qq_35425243/article/details/82856559