IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言自学篇:结构体的理解 -> 正文阅读

[C++知识库]C语言自学篇:结构体的理解

结构体的一般规范形式为:

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

int main()

{

struct tag s1;? ?// ①

}

其中,Struct是结构体关键字,tag是结构体标签,Struct tag合起来叫做结构体类型

声明成功好了结构体类型后,用一个大括号括起来,然后在大括号里面定义结构体标签的变量,即这个结构体标签具有的属性,如结构体标签是学生,那么我给它定义的变量就有学生的性别sex,手机号码telphone,学生的名字name等等。定义完成变量之后,在大括号后面可以创建全局变量,即结构体变量,如将variable-list换成s1,s2,s3等等,即可定义全局变量s1,s2,s3等等。

例;

Struct stu
{
char name[10];
char sex[4];
int tel[12];
short age;
}s1, s2, s3;

定义完成结构体类型之后,即可在接下来的函数中使用,如第①步,创建结构体类型,s1在这里是局部变量,仅能在函数范围内使用,一般我们尽量还是使用局部变量比较好,全局变量尽量少设置。

如果想将结构体类型名转换一下,如我想将Struct tag这个结构体类型名换成Stu,此时则需要使用到typedef关键字

例:源代码:

typedef Struct tag
{
member - list;
}Stu;

int main()

{

Struct tag s2;

Stu s1;? ?//②

}

如第②步。此时既可以使用struct tag去定义一个结构体变量s2,也可以使用Stu去定义一个s1结构体变量。

结构体类型中还可以定义其他结构体类型,使用方式是用一个大括号{}括起来,然后挨个在大括号内赋值另外一个结构体内定义的变量。

如:源程序

#include <stdio.h>
struct stu
{
?? ?short age;
?? ?int tele[12];
?? ?char sex[4];
?? ?char name[10];
};
struct tag
{
?? ?char name1[10];
?? ?char sex[4];?? ?
?? ?struct stu s;
?? ?int tele1[12];
};
int main()
{
?? ?struct tag s1 = { "张三","男",{15,15997595853,'男','李四'},13527781462 };
}

想要对结构体内部的变量进行引用的话需要使用int main内定义的结构体变量假如是s1,那么就是s1.加上定义s1的结构体内的变量,例如;

源代码:

#include <stdio.h>
struct stu
{
?? ?short age;
?? ?int tele;
?? ?char sex[4];
?? ?char arr[22];
};
struct tag
{
?? ?char name1[10];
?? ?char sex[4];?? ?
?? ?struct stu s;
?? ?int tele1;
?? ?char* pa;
};
void main()
{
?? ?char arr[] = "hello world";
?? ?struct tag s1 = { "张三","男",{15,15997595853,"男","hello world"},13527781462,arr};
?? ?printf("%d\n", s1.s.age);
?? ?printf("%s\n", s1.s.arr);

? ? printf("%s\n", s1.name1);
?? ?printf("%s\n", s1.sex);

? ? printf("%s\n", s1.pa);
}?

想要通过函数的方式引用结构体内部的变量以此得到它们的值时,可以通过传值调用,也可以通过传址调用。如果是传址调用,则需要使用函数定义接收结构体变量的指针变量通过->箭头加上变量名引用,如果是传值调用,则只需要通过函数接受结构体变量的变量加一个小数点.再加上结构体变量即可;例如以下代码的红色字体内容;

源代码:

#include <stdio.h>
struct tag
{
?? ?char name1[10];
?? ?char sex[4];?? ?
?? ?char tele1[12];
?? ?char* pa;
};
void print(struct tag tmp)
{
?? ?printf("name: ?%s\n", tmp.name1);
?? ?printf("sex: ? %s\n", tmp.sex);
?? ?printf("tele1: %s\n", tmp.tele1);

}
void print(struct tag* ps)
{
?? ?printf("name: ?%s\n", ps->name1);
?? ?printf("sex: ? %s\n", ps->sex);
?? ?printf("tele1: %s\n", ps->tele1);

}
void main()
{
?? ?char arr[] = "hello world";
?? ?struct tag s1 = { "张三","男","13527781462",arr};
?? ?print(s1);
?? ?print(&s1);
}

一般建议使用传址调用,因为如果一旦创建的结构体变量s1的内容过大,它需要的内存空间就多,如果是通过传值调用的方式,则还需要同时拷贝一份跟着分空间大小一摸一样的内存空间,这就造成了空间浪费,而如果是传址调用的话,就仅仅只需要传输一个s1的首地址,这样就可以很大程度上的节约内存空间,防止浪费。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 10:40:43  更:2021-09-10 10:41:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 12:23:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计