C语言 结构体

结构体的声明

struct 结构名
{
	类型  变量名;
    类型  变量名;
    ...
}结构体变量;

结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。
如:

struct st1
{
     int a;
     char b;
} s1,s2;
//此声明了拥有2个成员的结构体,分别为整型的a,字符型的b
//定义了两个st1结构体类型变量s1,s2

还有另外两种方式

struct st2
{
    int a;
    char b;
};//声明
struct st2 a,b,c[10];//定义
//用st2标签的结构体,另外定义了变量a,b,c,c为结构体数组

也可以用typedef创建新类型

typedef struct st3
{
    int a;
    char b; 
} st;
//现在可以用st作为类型声明新的结构体变量
st x,y,z[10];
//通过st定义了变量x,y,z,z为数组
//st换做struct st3,是一样的
结构体的初始化
struct st
{
	int a;
	char b;
	char c[4];
}s={10,'A',"abc"};
结构体的访问

成员访问运算符(.):成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号
如下面代码的:st1.a,st1.b,st1.c

struct st
{
	int a;
	char b;
	char c[4];
}st1;
int main()
{
	st1.a=20;
	st1.b='B';
	strcpy(st1.c,"ABC");
	printf("%d\n",st1.a);
	printf("%c\n",st1.b);
	printf("%s\n",st1.c);
}

结构体数组

在前面已经看到了结构体数组,下面我们来讲一讲结构体数组

struct student
{
	char name[16];  //姓名
    int num;  //学号
    int age;  //年龄
    int score;  //成绩
}stu[4] = 
{
    {"zhang san", 5, 18, 99},
    {"li si", 4, 17, 66},
    {"wangwu", 1, 18, 48},
    {"liu liu", 2, 17, 0}
};
结构体数组的访问

结构体数组的使用也很简单如,获取zhang san的成绩stu[1].score
例:输出以上信息

int
for(i=0;i<4;i++)
{
	printf("%-16s%5d%5d%5d\n",stu[i].name,stu[i].num,stu[i].age,stu[i],score);
}

结构体指针

struct st
{
	int a;
	char b;
}st1={100,'A'};
struct st *p=&st1;//结构体指针

通过结构体访问结构体成员(*p).a,或者是p->a
实例

#include <stdio.h>
struct
{
	char *name;  //姓名
	int num;  //学号
	int age;  //年龄
	int score;  //成绩
} stu1 = { "conan", 12, 18,100}, *pstu = &stu1;
int main()
    {
        //读取结构体成员的值
        printf("%s的学号是%d,年龄是%d,成绩是%.1f\n", (*pstu).name, (*pstu).num, (*pstu).age,(*pstu).score);
        printf("%s的学号是%d,年龄是%d,成绩是%.1f\n", pstu->name, pstu->num, pstu->age,pstu->score);
        return 0;
    }

结构体数组指针的使用

当一个指针的指向是一个结构体时,给这个指针变量+1,这个指针就会指向下一个结构体

#include<stdio.h>
struct student
{
	char name[16];  //姓名
	int num;  //学号
	int age;  //年龄
	int score;  //成绩
}stu[4]=
{
	{"zhang san", 5, 18, 99},
	{"li si", 4, 17, 66},
	{"wangwu", 1, 18, 48},
	{"liu liu", 2, 17, 0}
};
struct student *p
int main()
{
	for(p=stu;p<stu+4;p++)
	{
		printf("%-16s%5d%5d%5d\n",p->name,p->num,p->age,p->score);
	}
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值