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();
}
#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();
}