typedef是类型定义的意思,typedef struct是为了使用这个结构体方便。

在了解typedef之前我们先来了解一下什么是结构体类型:

C++提供了许多种基本的数据类型(如int、float、double、char等)供用户使用。但是由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。因此C++允许用户根据需要自己声明一些类型,用户可以自己声明的类型还有结构体类型(structure)、共用体类型(union)、枚举类型(enumeration)、类类型(class )等,这些统称为用户自定义类型(user-defined type,UDT)。

在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。C和C++允许用户自己指定这样一种数据类型,它称为结构体。它相当于其他高级语言中的记录(record)。例如,可以通过下面的声明来建立数据类型。

struct Student//声明一个结构体类型Student

{

int num;//包括一个整型变量num

char name[20];//包括一个字符数组name,可以容纳20个字符

char sex;//包括一个字符变量sex

int age;//包括一个整型变量age

float score;//包括一个单精度型变量

char addr[30];//包括一个字符数组addr,可以容纳30个字符

};//最后有一个分号

有点类似于java中的类,结构体是用户自定义的类型,比如在java中我们可以用

class student{

private string name;

private string num;

...

}

还有一些函数,在c语言中结构体中只能是数据,但是对于C++和java这种面向对象的语言来说里面还可以有函数。

值得一提的是,前面只是指定了一种结构体类型,它相当于一个**模型**,但其中并无具体数据,系统也不为之分配实际的内存单元为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。

如上面我们已经定义了一个结构体类型Student,那么我们就可以用它来定义结构体变量,如:

struct Student stu1,stu2;

这说明现在stu1,stu2都是结构体类型了,里面所包含的内容就必须喝上面定义的Student结构体相照应。

当然也可以直接在声明的时候就定义两个结构体变量

```cpp

struct Student//声明结构体类型Student

{

int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

}student1,student2;//定义两个结构体类型Student的变量student1,student2

关于结构体类型,有几点要说明:

(1) 不要误认为凡是结构体类型都有相同的结构。实际上,每一种结构体类型都有自己的结构,可以定义出许多种具体的结构体类型。

(2) 类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。

(3) 对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。

(4) 成员也可以是一个结构体变量。

(5) 结构体中的成员名可以与程序中的变量名相同,但二者没有关系

关于结构体里面的 变量

在定义了结构体变量以后,当然也可以引用这个变量

(1) 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。

(2) 可以引用一个结构体变量中的一个成员的值。

如stu1.num=10010;

(3) 如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。

例如,对上面定义的结构体变量student1, 可以这样访问各成员:

student1.num (引用结构体变量student1中的num成员)

如果想引用student1变量中的birthday成员中的month成员,不能写成student1.month,

必须逐级引用,即

student1.birthday.month=12;

(引用结构体变量student1中的birthday成员中的month成员)

(4) 不能将一个结构体变量作为一个整体进行输入和输出。

例如,已定义student1和student2为结构体变量,并且它们已有值。不能企图这样输出结构体变量中的各成员的值:

cin>>student1;

只能对结构体变量中的各个成员分别进行输入和输出。

(5) 对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算种类)。

结构体数组

一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:

每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项

定义

定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可。如

struct Student{

int num;

char name[20];

char sex;

int age;

float score;

char addr[30];

};

Student stu[3];//定义Student类型的数组stu

突然感觉自己的c语言白学了,这些也都是在百度找的东西,通俗的理解了一下,记录一下。

c语言结构体定义和使用typedef,结构体定义typedef struct 用法详解相关推荐

  1. 【C语言】结构体定义 typedef struct 用法详解和用法小结

    结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...

  2. c语言struct的作用和用法,c语言struct用法详解

    c语言struct用法详解 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.结构体的定义形式为:struct 结构体名{ 结构体所包含的变量或数组 }; 结构体是一种集合,它里面包 ...

  3. 结构体定义 typedef struct 用法详解和用法小结

    typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便. 具体区别在于:  若struct node{ }这样来定义结构体的话.在定义 node 的结构体变量时,需要这 ...

  4. C/C++语法知识:typedef struct 用法详解

    第一篇:typedef struct与struct的区别 1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定 ...

  5. C语言struct用法详解

    数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为 ...

  6. c语言switch case缩进,C语言中的switchnbsp;casenbsp;语句的用法详解

    本文就几个实例来说明Switch case 语句的用法. 说是C语言中的Switch case,其实和html+javascript中的Switch case语法是基本一样的哦. 问题: 有这么一个C ...

  7. C语言高频率--typedef和const用法详解

    一.typedef用法详解 C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 st ...

  8. 结构体NSPoint、NSRect、与NSSize或CG开头的详解

    结构体NSPoint.NSRect.与NSSize或CG开头的详解 1.坐标类NSPoint与CGPoint (1)NSPoint是表示UI元素的坐标的,等同于CGPoint,点击NSPoint进入文 ...

  9. sizeof 在C语言的作用,C语言中的sizeof的用法详解

    C语言中的sizeof的用法详解 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操 ...

最新文章

  1. ASIHttpRequest使用前的配置
  2. Panabit 安装指南
  3. JPA扩展(自定义sql)
  4. 027_Badge标记
  5. mysql 5.6 缓存_为什么默认情况下从MySQL 5.6开始禁用query_cache_type?
  6. MongoDB学习笔记(一)环境搭建与常用操作
  7. Elasticsearch技术解析与实战(五)Document解析
  8. NOI.AC#2144-子串【SAM,倍增】
  9. redis 内存不足 排查_排查redis占用内存达90%以上
  10. “约见”面试官系列之常见面试题之第五十八篇之join和split(建议收藏)
  11. 李名洋(1983-),男,中国电信股份有限公司云计算分公司数据分析师。
  12. Android开发之动态创建多个按钮
  13. 您可能(或可能不)知道的5条便捷的Transact-SQL技巧
  14. mysql 水平分表
  15. 关于求最长子串,使得最大减最小小于k的问题-以POJ4003为例
  16. centos下java编程工具_centos下安装JAVA开发工具(4)------Redis
  17. citypicker城市选择+高德定位,城市编码统一设置
  18. Web Uploader文件(图片)上传使用方法
  19. HDU 5602 Black Jack (记忆化搜索+DP)*
  20. 个人笔记应用 - 思源笔记

热门文章

  1. esc键退出全屏 vue_vue中的全屏事件,按esc退出全屏
  2. RecyclerView详细用法
  3. MTK Camera 开机启动流程
  4. 关闭水狐浏览器缓存设置
  5. 节后返京,太太太南了
  6. Python 开发简易巡检工具
  7. kubectl报错error validating data: the server could not find the requested resource
  8. 超经典C++益智游戏Number Maze
  9. python基础练习题:棋盘【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
  10. 希捷Rosewood硬盘T500LM030 ST1000LM035 ST2000LM007数据恢复分析