结构体的基本操作-结构体作为函数的参数

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//1.这样只是定义了一个结构体没有分配内存
typedef struct _Teacher
{
	char name[69];
	int age;
}Teacher;

//可以进行复制
void cpStruct(Teacher *p1, Teacher *p2)
{
	*p1 = *p2;
}

void cpStruct01(Teacher to, Teacher from)
{
	to = from;
}

int main()
{
	Teacher tl;//分配内存这里栈的
	strcpy(tl.name, "aaaaaa");
	tl.age = 22;
	Teacher *p = (struct Teacher *)malloc(sizeof(Teacher));//这里是动态分配到堆上面

	//p->age = 10;//就是在结构体的内存中,相对结构体内存的偏移量(实际就是模具盒子的大小取数值)
	//只有等号才进行操作内存
	//所以我们在p->age的时候是不用操作内存的
	//所以p->age;是能正常的编译通过
	//strcpy(p->name, "Hello");

	//printf("name = %s,age = %d\n", p->name, p->age);
	//2.释放的时候直接捆绑的释放

	//cpu进行寻址读取内存的时候都是4个字节或者8个字节的读取所以上面的数据都是4的倍数

	//printf("%d\n", sizeof(Teacher));//我们可以看到是76个字节但是我们加的时候只有74个字节

	free(p);

	//3.编译器对结构体的拷贝行为

	Teacher t2;

	//t2 = tl;
	cpStruct(&t2, &tl);//证明我们可以进行复制
	//cpStruct01(t2,tl);
	printf("name = %s,age = %d\n", t2.name, t2.age);

	system("pause");
	return 0;
}




下面是完整的代码:
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//1.这样只是定义了一个结构体没有分配内存
typedef struct _Teacher
{
	char name[69];
	int age;
}Teacher;

//可以进行复制
void cpStruct(Teacher *p1, Teacher *p2)
{
	*p1 = *p2;
}

void cpStruct01(Teacher to, Teacher from)
{
	to = from;
}

int main()
{
	Teacher tl;//分配内存这里栈的
	strcpy(tl.name, "aaaaaa");
	tl.age = 22;
	Teacher *p = (struct Teacher *)malloc(sizeof(Teacher));//这里是动态分配到堆上面

	p->age = 10;//就是在结构体的内存中,相对结构体内存的偏移量(实际就是模具盒子的大小取数值)
	//只有等号才进行操作内存
	//所以我们在p->age的时候是不用操作内存的
	//所以p->age;是能正常的编译通过
	strcpy(p->name, "Hello");

	//printf("name = %s,age = %d\n", p->name, p->age);
	//2.释放的时候直接捆绑的释放

	//cpu进行寻址读取内存的时候都是4个字节或者8个字节的读取所以上面的数据都是4的倍数

	//printf("%d\n", sizeof(Teacher));//我们可以看到是76个字节但是我们加的时候只有74个字节

	//3.编译器对结构体的拷贝行为

	Teacher t2;

	//t2 = tl;
	cpStruct(&t2, p);//证明我们可以进行复制
	//cpStruct01(t2,tl);
	printf("name = %s,age = %d\n", p->name, p->age);
	if (p != NULL)
	{
		free(p);
		p = NULL;
	}
	
	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值