C语言结构体、结构体数组、结构体指针的用法

一、结构体的定义

struct student{            //struct 结构体名
	long studentID;		  //数据类型 成员名1
	char studentName[10]; //数据类型 成员名2
	int scoreMath;		  //数据类型 成员名3
};

二、结构体变量的定义
1 先声明结构体模板,再定义结构体变量

struct student{            //struct 结构体名
	long studentID;		  //数据类型 成员名1
	char studentName[10]; //数据类型 成员名2
	int scoreMath;		  //数据类型 成员名3
};    
struct student stu1;      //结构体变量1
struct student stu2;	 //结构体变量1

2 在声明结构体模板的的同时定义结构体变量

struct student{            //struct 结构体名
	long studentID;		  //数据类型 成员名1
	char studentName[10]; //数据类型 成员名2
	int scoreMath;		  //数据类型 成员名3
}stu1;    //结构体变量

3 在声明结构体模板的的同时定义结构体变量, 结构体名可省略。

struct {                  //struct 结构体名
	long studentID;		  //数据类型 成员名1
	char studentName[10]; //数据类型 成员名2
	int scoreMath;		  //数据类型 成员名3
}stu1;    //结构体变量

三、用tyepedef定义数据类型
关键字typedef用于为系统固有的或程序员自定义的数据类型定义一个别名。
例如:typedef int STU; 为int定义了一个新的名字STU,即STU与int是同义词。

#include<stdio.h>
typedef int STU;
void main(){
	STU a=1,b=2,temp=0;
	temp=a;
	a=b;
	b=temp;
	printf("%d%d",a,b);
}

所以typedef struct student STUDENT;与下面表示别名是等价的。

typedef struct student {           //struct 结构体名
	long studentID;		 		  //数据类型 成员名1
	char studentName[10]; 		 //数据类型 成员名2
	int scoreMath;		  		//数据类型 成员名3
} STUDENT;     					//别名
STUDENT	stu1,stu2;			   //变量    
STUDENT STU[2];  			  //结构体数组变量的定义

四、结构体变量的初始化(包括结构体数组)

STUDENT stu1={2019001,"小范范",100};
STUDENT stu2={2019002,"王启年",90};
STUDENT STU[2]={{2019001,"小范范",100},{2019002,"王启年",90}}; //结构体数组变量的赋值

五、嵌套结构体(是一个结构体嵌套另一个结构体作为自己的成员)(包括结构体数组)

1定义

typedef struct data{
	int year;    //年 
	int month;	//月 
	int day;   //日 
}DTAE;
typedef struct student {           //struct 结构体名
	long studentID;		 		  //数据类型 成员名1
	char studentName[10]; 		 //数据类型 成员名2
	int scoreMath;		  		//数据类型 成员名3
	DTAE birthday;				//出生日期 
} STUDENT;                     //别名 
STUDENT stu1;
STUDENT stu2;
STUDENT STU[2];

2赋值

STUDENT stu1={2019001,"小范范",100,{1998,12,26}};
STUDENT stu2={2019002,"王启年",90,{1991,12,25}};
STUDENT STU[2]={{2019001,"小范范",100,{1998,12,26}},{2019002,"王启年",90,{1991,12,25}}}; 

3引用(调用)
结构体名变量名**.**成员名 //不是结构名

    stu1.birthday.year=1991;
	stu2.scoreMath=100;
	STU[0].studentID=2019001;

从键盘赋值时 char 类型不用添加&

	scanf("%c",stu1.studentName);

六、结构体指针的定义和初始化
1 结构体名*指针变量名

STUDENT *pt;

2定义并初始化

	STUDENT *pt=&stu1; //结构体指针变量pt指向结构体变量stu1

上下两者等价

STUDENT *pt;
pt=&stu1;

3标准访问形式
指针结构体变量名——>成员名

pt->birthday;

另一种不常用

(*pt).studentID;

4访问数组
以下三者等价

STUDENT *pt=STU;//指向数组STU第一个元素的地址
STUDENT *pt=&STU[0];
	STUDENT *pt;
	pt=STU;

4结构体指针一般不作输出用,下面这个是普通指针的输出

int a=9;
int *pt;
pt=&a;
printf("%d",*pt);

七、共用体(联合)
将不同类型的数据组织到一起共同占用一段内存的构造函数类型。

#include<stdio.h>
union student
{
	char ID;
	char name;
	int score;
 };
 typedef union student STUDENT;//STUDENT为别名
 int main() 
 {
 	printf("bytes = %d\n",sizeof(STUDENT));
	 return 0; 
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值