结构体与结构体指针

为什么要使用结构体在这里插入图片描述

如何使用结构体

声明结构体的一般形式为:
struct 结构体名 {
成员表列
};

例:
struct student{
//学号 姓名 年龄 性别
int num;
char name[20];
float age;
char sex;
};//结构体类型的声明

使用结构体的一般步骤
先声明结构体类型,再定义变量名

struct student s1,s2;

结构体scanf的读取和输出

#include<stdio.h>

struct student {
	//姓名 年龄 性别 学号
	char name[20];
	float age;
	char sex;
	int num;
};//声明结构体类型

int main() {
	//定义结构体变量
	struct student s[3];
	int i;
	for (i = 0; i < 3; i++) {
		scanf("%s%f %c%d", s[i].name, &s[i].age, &s[i].sex, &s[i].num);
	}
	for (i = 0; i < 3; i++) {
		printf("%s %5.3f %c %d\n", s[i].name, s[i].age, s[i].sex, s[i].num);
	}
	return 0;
}

注意:
1.结构体类型的声明要放在main函数之前,这样在main函数中才可以使用,结构体类型的声明最后一定要加分号,否则编译不通过,结构体的初始化只能在一开始定义。
2.采用“结构体变量名.成员名”的形式来访问结构体成员。使用scanf读取标准输入时,必须是各成员取地址,然后进行存储。整型数据(%d)、浮点型数据(%f)、字符串型数据(%s)都会忽略空格,而字符型数据(%c)不会忽略,所以如果要读取字符型数据,那么就要在待读取的字符数据与其他数据之间加入空格。

结构体指针(重难点)

一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设置一个指针变量,用它指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。当然,指针变量也可以用来指向结构体数组中的元素。
结构体指针的偏移(掌握)

//结构体指针的使用
#include<stdio.h>

struct student {
	//姓名 年龄 性别
	char name[20];
	int age;
	char sex;
};//声明结构体的类型

int main() {
	//定义结构体体变量并初始化
	struct student s = { "zhuoshilin",23,'m' };
	//定义结构体指针
	struct student* p;
	p = &s;//指针变量p的值为结构体s所占据的内存段的起始地址,即结构体s取地址赋值给p
	//指针变量访问成员有两种方式
	printf("%s %d %c\n", p->name, p->age, p->sex);
	printf("%s %d %c\n", (*p).name, (*p).age, (*p).sex);//成员选择运算符优先级高于取值运算符
	printf("------------------------------------\n");
	//定义结构体数组并初始化
	struct student sarry[3] = { "zhuoshilin",23,'m',"yintao",32,'w',"nba",30,'m' };
	p = sarry;//指针变量的值为结构体数组所占内存片段的起始地址
	printf("%s %d %c\n", p->name, p->age, p->sex);
	//结构体指针的偏移
	p = p++;
	printf("%s %d %c\n", p->name, p->age, p->sex);
	printf("------------------------------------\n");
	int num;
	num = p->age++;//num=p->age;(p->age)++;
	printf("num=%d p->age++=%d\n",num, p->age);//32 33
	num = p++->age;//num=p->age;p++;
	printf("num=%d p->age++=%d\n", num, p->age);//33 30
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值