C语言的结构体使用

1、基本的创建结构体和使用
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

struct Man
{
	int age;
	char *name;
};
void main() {
	struct Man man = { 20,"tom" };
	struct Man man1;
	man1.age = 30;
	man1.name = "Jam";
	printf("%d,%s\n", man.age, man.name);
	printf("%d,%s\n", man1.age, man1.name);
	getchar();
}

2、定义结构体的同时定义结构体变量

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

struct Man
{
	int age;
	char *name;
}man1;
void main() {
	man1.age = 30;
	man1.name = "Jam";
	printf("%d,%s\n", man1.age, man1.name);
	getchar();
}

3、定义结构体的同时定义结构体变量并赋值

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

struct Man
{
	int age;
	char *name;
}man1, man = {25,"桃木"};
void main() {
	man1.age = 30;
	man1.name = "Jam";
	printf("%d,%s\n", man1.age, man1.name);
	printf("%d,%s\n", man.age, man.name);
	getchar();
}

4、匿名结构体,控制结构体变量的个数(限量版),相当于单例

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

struct 
{
	int age;
	char *name;
}w;
void main() {
	w.age = 30;
	w.name = "Jam";
	printf("%d,%s\n", w.age, w.name);
	getchar();
}

5、结构体的嵌套使用

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

struct Man
{
	int age;
	char *name;
};
struct Boy
{
	int age;
	char *name;
	struct Man father;
};
void main() {
	struct  Boy boy;
	boy.age = 30;
	boy.name = "Jam";
	boy.father.age =54;
	boy.father.name = "李头";
	printf("%d,%s,%d,%s\n", boy.age, boy.name,boy.father.age,boy.father.name);
	getchar();
}

6、结构体指针的使用

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

struct Man
{
	int age;
	char *name;
};

void main() {
	struct Man *man;
	struct Man man1;
	man1.age = 21;
	man1.name = "李二";
	man = &man1;
	printf("%d,%s\n", man->age,man->name);
	getchar();
}

7、结构体数组和结构体指针


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

struct Man
{
	int age;
	char *name;
};

void main() {
	struct Man mans[] = { {12,"Tom"},{15,"Jam"} };
	struct Man *p = mans;
	for (int i = 0; i < 2; i++)
	{
		printf("%d,%s\n", p->age, p->name);
		p++;
	}
	
	getchar();
}

数组大小的算法:
int size=sizeof(mans) / sizeof(struct Man);
	printf("%d\n", size);
	for (int i = 0; i < size; i++)
	{
		printf("%d,%s\n", p->age, p->name);
		p++;
	}
//结构体变量的大小,必须是最宽基本数据类型的整数倍,如果结构体同时存在整形-4和双精度-8,则占用内存都是最宽的8.
	//提升读取的效率

8、结构体与动态内存分配

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

struct Man
{
	int age;
	char *name;
};

void main() {
	struct Man *mp = (struct Man*)malloc(sizeof(struct Man) * 10);
	struct Man *p = mp;
	p->age = 20;
	p->name = "加密";
	p++;
	p->age = 90;
	p->name = "临时";
	struct Man *m=mp;
	for (int i = 0; i < 2; i++)
	{
		printf("%d,%s\n", m->age, m->name);
		m++;
	}
	getchar();
}


9、结构体中的函数指针的使用

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

struct Man
{
	int age;
	char *name;
	void(*SayHi)(char *text);
};
void SayHi(char *text) {
	printf("%s\n", text);
}
void main() {
	struct Man man;
	man.SayHi = SayHi;
	man.SayHi("nihao");
	getchar();
}

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


struct Man
{
	int age;
	char *name;
	void(*SayHi)(char *text);
};
void SayHi(char *text) {
	printf("%s\n", text);
}
void reName(struct Man *man) {
	man->name = "挤挤";
}
void main() {
	struct Man man;
	man.SayHi = SayHi;
	man.age = 20;
	man.name = "lili";
	printf("%s\n", man.name);
	man.SayHi("nihao");
	reName(&man);
	printf("%s\n", man.name);
	getchar();
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值