C语言结构体和共用体_07
- 概述
- 定义结构体类型变量的方法
- 结构体变量的引用
- 结构体变量的初始化
- 结构体数组
- 指向结构体类型数据的指针
- 用指针处理链表
- 共用体
- 枚举类型
- 用 typedef定义类型
概述
定义一个结构体的一般形式:
struct 结构名 {
成员列表
};
一个结构体有一个结构名,但不是必须的。成员列表有若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名;
例如:
// 学号、姓名、性别、年龄、地址等属性
struct Student {
int num;
char name[];
char sex;
int age;
char addr[];
};
定义结构体类型变量的方法
在定义了结构体变量后,系统会位置分配内存单元。
可以采用三种方法定义结构体类型变量:
1)先声明结构体类型再定义变量名;
struct Student person1;
struct Student person2;
则,person1、person2 具有struct Student类型的结构。
2)在声明类型的同时定义变量
struct Student {
int num;
char name[];
char sex;
int age;
char addr[];
} student1, student2;
3)直接定义结构体类型变量,即不出现结构体名
struct {
int num;
char name[];
char sex;
int age;
char addr[];
} student1;
结构体可以嵌套:例如:
struct date {
int month;
int day;
int year;
};
struct Student {
int num;
char name[];
char sex;
int age;
char addr[];
struct date birthday; // date结构体
};
结构体变量的引用
在定义了结构体变量以后,若要引用这个变量,必须遵守以下规则:
1)不能将一个结构体变量作为一个整体进行输入和输出。
正确引用方法:结构体变量名.成员名
示例:
printf("\n%d\n%s\n%c\n%d\n%d\n%d\n%.2f\n", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
student1.num = ;
"."是成员(分量)运算符,它在所有的运算符中优先级最高。因此可以把student1.num等作为一个整体来看待。上面赋值语句的作用是将整数100赋给student1变量中的成员num。
struct Student student1 = {, "Kingdev", 'f', {, , }, .f};
struct Student student2 = {, "Learning", 'm', {, , }, .f};
student1 = student2; // 整体赋值
printf("\n%d\n%s\n%c\n%d\n%d\n%d\n%.2f\n", student1.num, student1.name, student1.sex, student1.birthday.year, student1.birthday.month, student1.birthday.day, student1.score);
打印出的结果为变量 student2 的值。
2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符一级一级的找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。如:
student1.birthday.year, student1.birthday.month, student1.birthday.day
3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)
如:
// 计算两位学生的分数和
float sum = student1.score + student2.score;
4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址;
结构体地址和结构体第一个元素地址是一致的。结构体变量的地址主要用作函数的参数,传递结构体变量的地址。
printf("student1 Address - %p\n", &student1);
printf("student1 first Ele - %p\n", &student1.num);
// 打印结果
student1 Address - 0x7fff5fbff7b0
student1 first Ele - 0x7fff5fbff7b0
结构体变量的初始化
尊重作者劳动成果,转载请注明: 【kingdev】
C语言结构体和共用体_07的更多相关文章
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型
函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...
- C语言------结构体和共用体
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...
- __c语言__结构体、共用体、枚举__笔记
2017-09-16 21:14:09 结构体,共用体,枚举 1.结构体 把不同的类型整合成一个有机的整体,以便于引用,这个类型就叫做结构体 1)结构体变量的定义方式(3种)和引用成员变量: 定义一个 ...
- C语言程序设计(十二) 结构体和共用体
第十二章 结构体和共用体 当需要表示复杂对象时,仅使用几个基本数据类型显然是不够的 根本的解决方法是允许用户自定义数据类型 构造数据类型(复合数据类型)允许用户根据实际需要利用已有的基本数据类型来构造 ...
- [C#.NET 拾遗补漏]14:使用结构体实现共用体
在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...
- C++程序设计之结构体,共用体,枚举和typedef
[1]结构体的基本功 注意结构体里面可以有很多东西,可以结构体里面包含结构体 #include<iostream> using namespace std; struct Date { i ...
- C++面试常见问题——13结构体与共用体的sizeof
结构体与共用体的sizeof 结构体的sizeof 结构体变量占用的内存空间大小通常是其基本类型的大小,但是由例外(字节对齐机制) struct S1{ char c[5]; int a; doubl ...
- 07.C语言:结构体、共用体、枚举
一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...
随机推荐
- html常用标签及属性,常用英语单词
目录 html常用标签 html常用标签属性 前端常用英语单词表(未完待续) 欢迎评论点赞交流,转发请添加原博客连接谢谢! Ctrl键+F 可以查找你想要的内容哦! html常用标签 htmi结构 & ...
- 6.Python初窥门径(小数据池,集合,深浅拷贝)
Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...
- 【SpringBoot】编写一个自己的Starter
一.什么是Starter? 在开发过程中我们就经常使用到各种starter,比如mybatis-spring-boot-starter,只需要进行简单的配置即可使用,就像一个插件非常方便.这也是Spr ...
- JavaScript进阶 - 第2章 你要懂的规则(JS基础语法)
第2章 你要懂的规则(JS基础语法) 2-1什么是变量 什么是变量? 从字面上看,变量是可变的量:从编程角度讲,变量是用于存储某种/某些数值的存储器.我们可以把变量看做一个盒子,盒子用来存放物品,物品 ...
- JAVAFX-2 开发应用
理解javafx 架构 ● 场景图(Scene Graph) ● JavaFX功能的公开API(Java Public APIs for JavaFX Features) ● 图形系统(Graphic ...
- window.location.origin兼容问题
if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + ...
- Codeforces Round #566 (Div. 2) B. Plus from Picture
链接: https://codeforces.com/contest/1182/problem/B 题意: You have a given picture with size w×h. Determ ...
- LWIP学习之流程架构
一 STM32F107的网络接口配置:#include "stm32_eth.h" 1.1 打开网口时钟,响应IO配置.NVIC中断:通过调用Ethernet_Configurat ...
- Exception in thread "main" java.lang.UnsupportedClassVersionError: com/google/common/base/Function : Unsupported major.minor version 52.0的解决办法(图文详解)
不多说,直接上干货! 问题详情 Exception in thread "main" java.lang.UnsupportedClassVersionError: com/goo ...
- hadoop集群启动时DataNode节点启动失败
错误日志如下: ************************************************************/ 2018-03-07 18:57:35,121 INFO o ...