• 概述
  • 定义结构体类型变量的方法
  • 结构体变量的引用
  • 结构体变量的初始化
  • 结构体数组
  • 指向结构体类型数据的指针
  • 用指针处理链表
  • 共用体
  • 枚举类型
  • 用 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. uoj#348/洛谷P4221 [WC2018]州区划分(FWT)

    传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...

  2. MySQL 5.7 INFORMATION_SCHEMA 详解

    refman mysql 5.7 INFORMATION_SCHEMA提供了对数据库元数据的访问,MySQL服务器信息,如数据库或表的名称,列的数据类型,访问权限等. 有时也把这些信息叫做数据字典或系 ...

  3. hadoop是什么?新手自学hadoop教程【附】大数据系统学习教程

    Hadoop是一个由Apache基金会所开发的分布式系统基础架构. Hadoop是一个专为离线和大规模数据分析而设计的,并不适合那种对几个记录随机读写的在线事务处理模式. Hadoop=HDFS(文件 ...

  4. Java与Javac版本不一致问题解决方案

    问题:在自己电脑上运行java -version和javac -version,发现java版本不一致,然后查看了环境变量,JAVA_HOME 是 C:\Program Files(x86)\Java ...

  5. javascript中的style只能取到在HTML中定义的css属性

    如果在css中定义的 li{ width:100px; left:100px; top:; position:absolute; font-style:normal; } 这样执行: oli[0].s ...

  6. Java EE学习笔记(九)

    MyBatis的关联映射 1.关联关系概述 1).实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系.针对多表之间的操作,MyBatis提供了关联映射,通 ...

  7. Jenkins权威指南

    https://jenkins.io/doc/   ---官网 https://www.cnblogs.com/leefreeman/p/4226978.html

  8. Java 多线程概念

    1.为什么要使用多线程: 更多的处理器核心. 更快的响应时间. 更好的变成模型. 2.线程的优先级: 现代操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个的时间片,线程会分配到若干时间片 ...

  9. springIOC+Mysql+springmvc事务测试题总结

    1.关于http1.1和1.0的长连接和短连接 两个都支持长连接和短连接 http1.0默认为短连接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接 http1.1 ...

  10. UNITY_MATRIX_MVP和UnityObjectToClipPos

    在unity5.6以上版本中,shader中的UNITY_MATRIX_MVP将会被UnityObjectToClipPos替代,以后我们在写顶点函数时就是这样的 v2f vert(appdata v ...