结构体:允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体.
说白了就是你按照自己的想法在一个单元里添加几种不同的类型,
结构体的定义:
例如
struct student //这里的student是类型名,就是相当于你下边的 int float char 一样 { int num; char name[20]; int age; float score; char addr[30]; }STU; //STU则是称之为结构体的变量名 ,比如上边的 num name score //只有定义类型,系统才可以分配内存单元
结构体的使用:
既然我们已经定义好了一个结构体,那怎么去使用这个结构体呢
例如:结构体变量名.成员名
struct point //point 是结构标记,用于结构命名-类型名
{
int a=3;
int b=5;
}OUT; //OUT是变量名,
在main函数中
printf("%d",OUT.a);
结构体的初始化:
//在结构体中进行初始化
struct student
{
long int num;
char name[20];
char sex;
char addr[30];
}a = {89031, "Li Lin", 'M', "123 Beijing Road"};
//但是这个的结构体的末尾不一样了,外部来进行初始化。
。。。。。。
。。。。。。
char sex;
char addr[30];
};
struct student a = {{10101, "Li Lin", 'M', 18},
//main函数中来进行初始化
void main()
{
struct student a;
stu.num = 12345;
strcpy(stu.name, "Li Li"); //字符串不能直接输入,最好运用这个库函数
stu.score[0] = 67.5; //数组的话添加数组的下标
stu.score[1] = 89;
stu.score[2] = 78.6;
}
结构体数组-数组的初始化
//对于结构体数组的初始化,数组在外
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
};
struct student stu[3];
//对于结构体数组的初始化,数组在里边
struct student
{
int num;
char sex;
}stu[3] = { {1,'A'},{2,'B'},{3,'C'} };
这个是能正常运行的
**指向结构体数组的指针(数据结构用)
#include <string.h>
#include <stdio.h>
#include <stdlib.b>
struct student
{
long num;
char name[20];
char sex;
float score;
};
void main()
{
struct student stu_1;
struct student *p; //定义一个相同类型的指针,*同类型*
p = &stu_1;
stu_1.num = 89101;
strcpy(stu_1.name, "Li Lin");
stu_1.sex = 'M';
stu_1.score = 89.5;
printf("NO. :%ld\nname: %s\nsex:%c\nscore:%f\n", stu_1.num, stu_1.name, stu_1.sex, stu_1.score);
printf("NO. :%ld\nname: %s\nsex:%c\nscore:%f\n", (*p).num, (*p).name, (*p).sex, (*p).score);
//对于指针其实可以换个方式
(*p).score 等价于 p->score
}
其实这里又回归了指针的定义
int a = 5;
int *p; //指针就是专门指向地址的
p=&a;//利用指针指向a的地址
*p其实就等价于a
随后扩展的就是指向数组的指针
struct student *p;
for(p=stu; p<stu+3;p++) //这个就完全是使用指针元素来进行了,后边的那个stu+3 是说明数组为3
printf("%5d %-20s %2c %4d\n", p->num, p->name, p->sex, p->age);
指针 函数 结构体的三个结合部分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define FORMAT "%d\n%s\n%f\n%f\n%f\n"
struct student
{
int num;
char name[20];
float score[3];
};
void print(struct student stu) //同样在这个函数中也是来一样的类型的
{
printf("%d\n%s\n%f\n%f\n%f\n", stu.num, stu.score[0], stu.score[1], stu.score[2]);
printf("\n");
}
void main()
{
struct student stu;
stu.num = 12345;
strcpy(stu.name, "Li Li");
stu.score[0] = 67.5;
stu.score[1] = 89;
stu.score[2] = 78.6;
print(stu); //调用一个函数
}
其实更多是针对于复习
文章摘录来自:C 结构体 | 菜鸟教程