第十章、结构体指针与typedef的使用

2023-12-28 11:58:19

一、结构体指针? ? ? ??

一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设置一个指针变量用它指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素,从而能够通过结构体指针快速访问结构体内的每个成员。

//typedef
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
struct student {
	int num;
	char name[20];
	char sex;
};
int main(void)
{
	struct student s = { 1001,"wangle",'M' };
	struct student sarr[3] = { 1001,"lile",'M',1005,"zhangsan",'M',1007,"lili",'F' };	//结构体数组
	struct student* p;	//结构体指针变量
	p = &s;
	printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex);		//(*p)变为整体等价为s
	//等价于以下
	printf("%d %s %c\n", p->num, p->name, p->sex);	//通过结构体指针访问成员
	p = sarr;	//等价于p=&sarr[0],取结构体数组中第一个元素
	printf("------------------------------\n");
	p = p + 1;	//指针偏移到结构体数组的第二个元素
	printf("%d %s %c\n", p->num, p->name, p->sex);
	return 0;
}

二、?typedef的使用

????????前面定义结构体变量时使用的语句是 struct student s,以这种方式来定义结构体变量有些麻烦,即每次都需要写 struct student。简单一些的定义方式可以选择使用 typedef 声明新的类型名来代替已有的类型名。

//typedef
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct student {	//tupedef重命名结构体
	int num;
	char name[20];
	char sex;
}stu, * pstu;		//struct student重命名为stu,pstu等价于struct student*
typedef int INGETER;	//可用于变量类型更改
int main()
{
	stu s = { 0 };	//数组中的变量都是零
	stu* p = &s;	//定义了一个结构体指针变量
	pstu p1 = &s;
	INGETER num = 10;	//局部变量名可以用与结构体中成员的名字相同
	printf("num=%d,p->num=%d\n", num, p->num);
	return 0;
}

文章来源:https://blog.csdn.net/All_are_vanity/article/details/135260417
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。