typedef的基本应用

本文介绍了typedef在C/C++中的使用,讲述了其命名规定、与#define的区别、操作方法,并通过实例演示了结构体指针嵌套。重点讲解了如何创建类型别名简化代码,以及如何在结构体数组操作中应用typedef。
摘要由CSDN通过智能技术生成

typedef

1.命名规定

习惯上常把用typedef声明的类型名的第1个字母用大写表示,以便与系統提供的标准类型标识符相区别。

2.typedef与#define区别

●与#define不同,typedef 仅限于数据类型,而不是能是表达式或具体的值。

●#define发生在预处理,typedef 发生在编译阶段。

●#define常量起别名(简单的文字替代),typedef 是给类型起别名(满足连续定义)。

3. typedef操作方法

简单地说,就是按定义变最的方式,把变量名换上新类型名,并且在最前面加“typedef' ,就声明了新类型名代表原来的类型。

归纳起来,声明一个新的类型名的方法是:

①先按定义变量的方法写出定义体(如: int i;)。

②将变量名换成新类型名(例如:将i换成Count)。

③在最前面加typedef(例如: typedef int Count)。

④然后可以用新类型名去定义变量。

//普通定义
struct shu
 {
         int id;
         char name[20];
         float score;
};
    struct shu stu01={1001,"wuzhe",150},stu02;
//取别名定义(简化书写)
typedef struct shu
 {
         int id;
         char name[20];
         float score;
}Stu;
    Stu stu01={1001,"wuzhe",150},stu02;

4.结构体指针嵌套

#include <stdio.h>

void test1(void)
{
        typedef struct
        {
                int year;
                int month;
                int day;
        }Bir;
        
        typedef struct{
                int id;
                char name[20];
                Bir *p;
        }Stu;
        
        Stu stu01={1001,"wuwei"};
        Bir bir01={2001,2,29};
        stu01.p=&bir01;
        printf("%d %s %d-%d-%d\n",stu01.id,stu01.name,\
            stu01.p->year,stu01.p->month,stu01.p->day); 
}

int main()
{
        test1();
        return 0;
}

作业

1.对学员进行修改,调换位置,增加,删除

#include <stdio.h>
#include <string.h>

typedef struct 
{
	int id;
	char name[20];
	char sex;
	float score;
}Stu;

void print(Stu *p,int n)
{
	int i;
	for(i=0;i<n;i++){
		printf("第%d个学生信息为\n",i+1);
		printf("%d  %s  %c  %.2f\n",(*(p+i)).id,(*(p+i)).name,(*(p+i)).sex,(*(p+i)).score);
	}
	
}

int fail(Stu *p,int n)
{
	int i,ret=0;
	for(i=0;i<n;i++){
		if((*(p+i)).score<60)
		ret++;
	}
	return ret;
}

void add(Stu *p,int n)
{
	*(p+5)=*(p+4);
//	num[4]={105,"ma li",'f',20};
	(*(p+4)).id=105;
	strcpy((*(p+4)).name,"ma li");
	(*(p+4)).sex='f';
	(*(p+4)).score=20;
	
}

void del(Stu *p,int n) 
{
//	num[n-1].id=0;
//	strcpy(num[n-1].name," ");
//	num[n-1].sex=' ';
//	num[n-1].score=0;
	memset((void *)(p+n-1),0,sizeof(p[n-1]));
}

int main()
{
	Stu stu[6]={{101,"li ping",'m',45},	//根据题意初始化 
			{102,"zhang ping",'m',62.5},
			{103,"he fang",'m',92.5},
			{104,"cheng ling",'f',87},
			{106,"wang ming",'m',58}};
	int n; 
	Stu *p=stu;
	n=fail(p,5);
	printf("不及格人数为:%d\n",n);
	add(p,6);		//在wangming前加一个 
	print(p,6);
	
	del(p,4);		//cheng ling 转学,删除信息 
	printf("\n");
	print(p,6);
	return 0;
}

 结果为:

 

2.编写一个程序,完成根据学员姓名查询成绩的功能(要求查询通过函数实现),定义一个学员结构体,包含姓名,成绩,定义一个结构体数组,保存所有学员的信息(假定有3个学生),首先录入学员信息,然后调用查询函数获得要查询学员成绩

#include <stdio.h>
#include <string.h>

typedef struct
{
	char name[20];
	float score;
}Stu;

void scan(Stu a[],int n)
{
	int i;
	for(i=0;i<n;i++){
		printf("请输入第%d个学员的信息(name score)\n",i);
		scanf("%s",&a[i].name);
		scanf("%f",&a[i].score);
	}
}

int sear(Stu a[],int n)
{
	lable:
	printf("请输入你要查询的学员\n");
	char nam[20];
	scanf("%s",&nam);
	for(int i=0;i<n;i++){
		if(strcmp(nam,(a[i].name))==0){
//			printf("log1=%d\n",i);
			return i;
		}
		else{
			printf("不存在该学员,请确认学员信息"); 
			goto lable;
		}
		
	}
}

void print(Stu a[],int i)
{
	printf("name:%s score=%.2f",a[i].name,a[i].score);
}

int main()
{
	int num;
	Stu a[3];
	scan(a,3);
	num=sear(a,3);
//	printf("log=%d\n",num);
	print(a,num);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值