• 概述
  • 定义结构体类型变量的方法
  • 结构体变量的引用
  • 结构体变量的初始化
  • 结构体数组
  • 指向结构体类型数据的指针
  • 用指针处理链表
  • 共用体
  • 枚举类型
  • 用 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. Python学习笔记(socket)

    socket(数据传输接口) 搭建服务端 1.导入模块 import socket 2.创建socket对象 sock=socket .socket(socket_family,socket_topy ...

  2. 笔记-迎难而上之Java基础进阶2

    Set集合 import java.util.*; public class HashSetDemo{ public static void main(String[] args){ //Set接口的 ...

  3. mysql--浅谈子查询1

    这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师. 依赖软件:mysql5.6 系统环境:win 子查询概念 子查询就是在原有的查询语句中嵌入新的查询 子查询分类 1.where型子查 ...

  4. 13.组合查询--SQL

    利用UNION操作符将多条SELECT语句组合成一个结果集. 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回结构数据: 对一个表执行多个查询,按一个查询返回数据. UNION规则 UNI ...

  5. [软件工程基础]Alpha 展示博客

    团队成员 个人简介 个人简介参照团队介绍博客. 个人博客 王嘉睿爵:http://www.cnblogs.com/whynotRW/ 游心:http://www.cnblogs.com/jefhq/ ...

  6. Java中List,Set和Map详解及其区别和使用场景(转)

    https://www.cnblogs.com/EasonJim/p/7967138.html

  7. NetCore中使用Myrmec

    NetCore中使用Myrmec Myrmec 是什么? Myrmec 是一个用于检测文件格式的库,Myrmec不同于其它库或者手写检测代码,Myrmec不依赖文件扩展名(在实际使用中,你的用户很可能 ...

  8. exportExcel()方法注意事项

    1.保证数据集里的字段和SQL语句里字段全部一致,包括sql语句里必须有系统字段 2.exportExcel()执行的时候,是先去执行SQL语句,再去到数据集里面进行不对,若有不一致的地方,则报列名无 ...

  9. MySQL存储过程多条修改语句

    DROP procedure Sel_Function_ActivityPastDueDELIMITER $$DROP procedure IF EXISTS`shouyi`.`Sel_Functio ...

  10. php 根据周数获取当周的开始日期与最后日期

    /** * 根据第几周获取当周的开始日期与最后日期 * @param int $year 年份 $weeks = get_week($year) * @param 如获取第18周的开始日期$weeks ...