结构体和联合体

一.结构体

1.为什么要提出结构体

我们知道数组是用来存储一组相同数据类型的,那么如果现在要存储一些不同类型的数据该用什么来实现呢?

此时结构体就有了用武之地,它可以同时处理多种数据类型数据。(结构体是一种数据类型,程序员可自己设计)

2.定义

关键字是:struct

用实例来说明其定义:

struct ebil{
   int age;
   char name[20];
};//此处分号是强制的
struct ebil e; 这里的e是类型为结构体ebil的变量。(当申明结构体变量时系统才会为结构体分配内存)

初始化:

struct ebil ec={20,"李明"};
struct ebil ed={21,"王鑫"};
说明:结构体声明在main函数之前是对所有函数可见的,但声明在main函数中只在main中可见。

3.访问结构体成员

结构体变量申请完毕后,如何使用变量的数据成员才是我们最关心的问题。访问结构体变量的数据

成员使用点号来引用——点操作符或者结构体成员操作符。

e.age;
e.name;

4.结构体指针

申明结构体指针: struct ebil *pv; 

使用结构体指针来访问结构体数据成员变量使用箭头操作符:

pv->age;
pv->name;
5.结构体数组

当我们需要许多相同类型结构体时就可以使用结构体数组了。

struct ebil er[50];
同样我们还可以使用结构体指针数组:
struct ebil *p[50];
当想要动态为指针数组分配内存是可以使用:
p[i]=(struct ebil *)malloc(sizeof(struct ebil));
6.结构体作为函数参数

结构体作为一种数据类型当然可以作为函数的参数进行传递,只需要将结构体变量传递给函数即可:

#include <iostream>
#include<stdio.h> 
#include<conio.h>
struct str{
	int age;
	char name[20];
};
void function(struct str p);
int main(int argc, char** argv) { 

	struct st t={20,"李明"};//初始化 
	function(t);
	return 0;
}
void function(struct str p){
	
	printf("结构体第一个成员变量age=%d",p.age);
	
	printf("结构体第二个成员变量name=%s",p.name);
	
}

既然结构体可以作为函数的参数,那么也可以作为函数的返回值——函数可以返回一个结构体指针。

在返回结构体指针时,需要将结构体实例的地址保存在一个指针中。比如:函数function返回一个结构体指针,pv是指针

那么可以:pv=function();然后通过pv来获得结构体中的数据成员。

7.结构体的拷贝

结构体的拷贝只仅限于类型相同的结构体变量,其拷贝的方法有两种方法。

第一种:数据成员依次拷贝

struct ebil b1,b2;
b1.age=b2.age;
b1.name=b2.name;
第二种:结构体变量直接拷贝(简单)
struct ebil e1,e2;
e1=e2;
八.嵌套结构体

结构体中允许嵌套结构体:比如对一个人来说,姓名和年龄可以使用嵌套结构:

struct birthday{
	int year;
	int month;
	int day;

};
struct body{
	char name[20];
	struct birthday b;
};
二.联合体(关键字 union)

和结构体类似,但是联合体中的所有数据成员共用一块最大内存块,而及结构体所占内存是所有数据成员的所占

内存之和。









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值