前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言中结构体的认识

C语言中结构体的认识

原创
作者头像
好派笔记
修改2021-09-17 18:09:48
7190
修改2021-09-17 18:09:48
举报
文章被收录于专栏:好派笔记

1,结构体是什么

结构体是组合数据类型的一种,其成员类型可以是相互关联的基本数据类型也可以是结构体 类型

2,使用场合

当要处理大量有关联的不同数据类型的时候,例如一个学生的信息,有学号(int),姓名(char *),年龄(int)等信息,就可以使用结构体,大大提高效率

3,怎么用

(1)声明或者说定义结构体类型

与基本数据变量的定义不同,由于系统已经知道基本数据类型的结构,类型名 变量名

就可以搞定,但是结构体是用户自己定义的,

首先要声明或定义结构体类型,告诉系统有这个类型,是怎么样的,定义结构体类型的方式为: 使用关键字struct 后面跟上类型名

struct 类型名

{

成员列表;//成员类表就是成员的 类型 名字;类型可以是基本数据类型,也可以是结构体类型

}

如:struct Student

{

int num;

char name[20];

char sex;

int age;

char address[20];

}; //这样就定义了一个结构体类型Student,内部包含学生的各种信息

(2)定义结构体变量

在声明结构体类型(相当于一个模板)后就可以定义结构体变量了,主要有三种方式:

1> > 声明结构体类型和定义结构体变量分开(最常用和灵活的方式)

struct Student

{

int num;

char name[20];

char sex;

int age;

char address[20];

};//在声明了结构体类型struct Student后,定义结构体变量

struct Student studnet1,student2;//定义了两个结构体变量student1和student2

2>> 在声明结构体类型的同时定义结构体变量。如:

struct Student

{

int num;

char name[20];

char sex;

int age;

char address[20];

}studnet1,student2;

3>> 在声明结构体类型的同时定义结构体变量(匿名对象),但是没有类型名 如:

struct

{

int num;

char name[20];

char sex;

int age;

char address[20];

}studnet3;

4,使用注意

1>> 结构体类型和结构体变量是两个不同的概念,结构体类型相当于一个模板,在编译时是

不分配存储空间的,只对定义的.

结构体变量按照模板的定义分配相应的存储空间,这样的话只能对结构体变量赋值,存

取和运算,而不能对结构体类型进行赋值,存取和运算

2>> 同一作用域内不可重复定义结构体类型和结构体变量,匿名类型对象除外

3>> 可在函数内也可在函数外,效果及用法类似于局部变量和全局变量,也可以嵌套定义

4>> 可在函数内外定义同一个结构体类型,同样遵循就近原则

5>> 只有在定义结构体变量的同时才能批量初始化,定义结构体变量后,只能一个一个的初

始化

5,与数组的区别

1>> 结构体可以存不同类型的元素,而数组只能存同一类型

2>> 结构体类型需要我们自已定义.数组是用别的类型加[元素个数]

3>> 结构体内存分配方式很特别,使用对齐原则,不一定是所有元素的字节数和,而数组一定是 所

有元素的字节数和.

4>> 结构体指针可以指针名->结构体元素名(取元素);数组不行

6,结构体数组

结构体数组本质是数组,数组元素是同一类型的结构体变量,例如定义一个Student结构体

数组用于存放一个班级所有学生的信息

7,结构体指针

是指向结构体变量的指针,用法如下

struct Person

{

char *name;

int age;

}; // 定义结构体类型

struct Person per={"wangjintaof",2};//定义结构体变量的同时批量初始化

struct Person *p=&per; //定义指向结构体类型的指针,并初始化,使其指向pe

然后就可以用指针引用和访问结构体变量的元素了,具体三种方式如下

1>>>. P->name = "wangjintao";//给name成员变量赋值

2>>>. (*p).name = "wangjitnao";//给name成员变量赋值、

3>>>. Per.name="wangjitnao";

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档