结构体定义、类型、相关初始化

目录

一、结构体定义

二、结构体类型及其定义初始化

结构体指针

结构体数组


一、结构体定义

结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。

结构体组成:结构体由结构体标签tag 、结构体成员member 、结构体变量var组成。

struct tag
{
  member-list;
}variable-list;

 注意:

结构体类型与结构变量是两个不同的概念,其区别如同int类型和int变量的区别一样。

int x=10;

struct student stu;

结构类型中的成员名,可以与程序中的变量同名,它们代表了不同的对象,互不干扰

int main()
{ 

int id=10;

char name='a';

}

结构类型中的数据项,既可以是基本数据类型也可以是结构体类型(struct) 。

( 基本数据类型是byte,short,int,long,float,double,boolean,char。 )

二、结构体类型及其定义初始化

首先声明结构体类型,接着定义初始化结构体变量。

struct student{
 int ID;
char name;
}stu;

注:这里的stu表示变量名 。一个变量后边加点表示为结构体, 一个结构体可以有很多字段 用点隔开表示变量的不同字段。

stu.ID =20;

如果要再定义一个变量,这时需要加上struct。

struct  san  a; //利用struct声明san是一个类型名(类似int)

使用typedef可以简化结构体的类型名 struct

typedef  struct{
  int ID;

  char name;
}stu;

注:这里的stu表示一个别名 ,因为别名的存在,结构体名可省。(这里省略了student)

stu san;

san.ID =666;

不加typedef与加了typedef最大的区别在于:后者在定义结构体变量时可以省写struct。

若struct san {}这样来定义结构体的话。在申请node 的变量时,需要这样写,struct san n;

若用typedef,可以这样写,typedef struct san{}SAN; 。在申请变量时就可以这样写,SAN n;

一般使用typedef同时定义结构类型和结构指针类型,如:

1.分开定义

struct Data {
  int a;
  int b;
  int c;
};// 先定义结构体

typedef struct Data *PData; // 再用 typedef 定义指针

2.一起定义

typedef struct Data {
  int a;
  int b;
  int c;
} Data, *PData ;

如果没有typedef,那么就只能定义结构体变量,不能定义结构体指针类型。

// 定义两个结构体类型的指针变量
struct node{
    int value;
    data* next;
}*data1,*data2;
// 上面的写法等价于
data1 = new data(); // new()的返回值是指针
data2 = new data(); // new()的返回值是指针

结构体指针

  • 通过指向结构变量的指针来访问(修改)结构变量的成员,与直接使用结构的效果一样。一般来说,如果指针变量pointer已指向结构变量var,则以下两种形式等价:

(1)var.成员

(2)pointer->成员

注意:

(1)分量运算符左侧的运算对象,只能是结构变量,不能是指针

(2)指向运算符左侧的运算对象,只能是指向结构变量(或结构数组)的指针,否则都出错。

#include<stdio.h>
typedef  struct student {
	int ID;

	char name;
}stu;
int main() {
	int ID = 001;
	stu sat = { 444,'a' };
	printf("stu.id=%d,stu.name=%c\n", sat.ID, sat.name);
	stu*  pi = &sat;
	pi->ID = 333;
	printf("stu.id=%d,stu.name=%c\n", sat.ID, sat.name);
	return 0;
}

结果如下:

结构体数组

数组里存放的是结构体

struct student{

  int ID,age;

}stu[10];

使用如下:

stu[0].ID = 20;

stu[0].age = 18;

stu[1].ID = 15;

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值