• 概述
  • 定义结构体类型变量的方法
  • 结构体变量的引用
  • 结构体变量的初始化
  • 结构体数组
  • 指向结构体类型数据的指针
  • 用指针处理链表
  • 共用体
  • 枚举类型
  • 用 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的更多相关文章

  1. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  2. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  3. C语言------结构体和共用体

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...

  4. __c语言__结构体、共用体、枚举__笔记

    2017-09-16 21:14:09 结构体,共用体,枚举 1.结构体 把不同的类型整合成一个有机的整体,以便于引用,这个类型就叫做结构体 1)结构体变量的定义方式(3种)和引用成员变量: 定义一个 ...

  5. C语言程序设计(十二) 结构体和共用体

    第十二章 结构体和共用体 当需要表示复杂对象时,仅使用几个基本数据类型显然是不够的 根本的解决方法是允许用户自定义数据类型 构造数据类型(复合数据类型)允许用户根据实际需要利用已有的基本数据类型来构造 ...

  6. [C#.NET 拾遗补漏]14:使用结构体实现共用体

    在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...

  7. C++程序设计之结构体,共用体,枚举和typedef

    [1]结构体的基本功 注意结构体里面可以有很多东西,可以结构体里面包含结构体 #include<iostream> using namespace std; struct Date { i ...

  8. C++面试常见问题——13结构体与共用体的sizeof

    结构体与共用体的sizeof 结构体的sizeof 结构体变量占用的内存空间大小通常是其基本类型的大小,但是由例外(字节对齐机制) struct S1{ char c[5]; int a; doubl ...

  9. 07.C语言:结构体、共用体、枚举

    一.结构体 是一种复合的数据类型,由多个不同类型的数据(为结构体的成员)组成的集合. 在c语言中没有给出结构体这种类型具体的形式(名称),但是给出类定义该结构体类型的方法(格式). 在使用结构体类型时 ...

随机推荐

  1. PV、UV、VV、IP是什么意思?

    PV.UV.VV.IP作为网站分析中最常见的基础指标,能够从宏观概括性地衡量网站的整体运营状况,也是检测网站运营是否正常的最直观的指标. 1.VV(来访次数/访问次数):VisitView 记录所有访 ...

  2. jsp学习与提高(一)——JSP生命周期、三大指令及动作

    1.jsp定义: 1.1以java语言为脚本语言,运行在服务端的程序: 1.2处理客户请求,生成页面 1.3其本质是个sevlet会生成.java文件编译后再生成.class文件 2.jsp生命周期( ...

  3. C 语言实例 - 判断奇数/偶数

    C 语言实例 - 判断奇数/偶数 C 语言实例 C 语言实例 以下实例判断用户输入的整数是奇数还是偶数. 实例 #include <stdio.h> int main() { int nu ...

  4. Java中的"\t"

    \t相当于表格制表符tab键,一个格内放8的整数倍的字符,根据显示的字符串长度,剩下的显示空格数.比如:字符串长度为1,那么距离下一个串的空格数应该是8-1=7:如果字符串长度为2,那么距离下一个串的 ...

  5. HDU-1498-50years,50colors(最大匹配, 枚举)

    链接:https://vjudge.net/problem/HDU-1498#author=634579757 题意: 撞气球游戏,一个n*n的矩阵中,有不同颜色的气球,气球的颜色最多50种(从1到5 ...

  6. BestCoder Round #81 (div.2) 1003 String

    题目地址:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=691&pid=1003题意:找出一个字符串满足至少 ...

  7. NetCore组件

    NetCore之组件写法 本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也 ...

  8. NET Core应用中如何记录和查看日志

    NET Core应用中如何记录和查看日志 日志记录不仅对于我们开发的应用,还是对于ASP.NET Core框架功能都是一项非常重要的功能特性.我们知道ASP.NET Core使用的是一个极具扩展性的日 ...

  9. Ubuntu下安装nginx及使用

    首先介绍以下nginx.下图来自百科介绍:详细介绍地址:https://baike.baidu.com/item/nginx/3817705?fr=aladdin 在我们平时的开发娱乐中,也许并不会涉 ...

  10. springboot在lunix后台启动,退出账号也不关闭

    首先需要进到自己springboot项目的根目录,然后执行如下linux命令 nohup java -jar 自己的springboot项目.jar >日志文件名.log 2>&1 ...