一、结构体

1)、概念

结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。

结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。

像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。

在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:

struct 结构体名{

结构体所包含的变量或数组

};

struct stu{

char *name; //姓名

int num; //学号

int age; //年龄

char group; //所在学习小组

float score; //成绩

};

注意大括号后面的分号;不能少,这是一条完整的语句。

stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。

成员的获取和赋值

,结构体使用点号.获取单个成员。获取结构体成员的一般格式为:

结构体变量名.成员名;

需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

2)、结构体变量

结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。

3)、结构体数组

4)、结构体和指针

指针也可以指向一个结构体,定义的形式一般为:

struct 结构体名 *变量名;

获取结构体成员

通过结构体指针可以获取结构体成员,一般形式为:

(*pointer).memberName

或者:

pointer->memberName

第一种写法中,.的优先级高于*,(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。

第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。

#include

int main(){

struct{

char *name; //姓名

int num; //学号

int age; //年龄

char group; //所在小组

float score; //成绩

} stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;

//读取结构体成员的值

printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);

printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);

return 0;

}

运行结果:

Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!

Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!

【示例】结构体数组指针的使用。

#include

struct stu{

char *name; //姓名

int num; //学号

int age; //年龄

char group; //所在小组

float score; //成绩

}stus[] = {

{"Zhou ping", 5, 18, 'C', 145.0},

{"Zhang ping", 4, 19, 'A', 130.5},

{"Liu fang", 1, 18, 'A', 148.5},

{"Cheng ling", 2, 17, 'F', 139.0},

{"Wang ming", 3, 17, 'B', 144.5}

}, *ps;

int main(){

//求数组长度

int len = sizeof(stus) / sizeof(struct stu);

printf("Name\t\tNum\tAge\tGroup\tScore\t\n");

for(ps=stus; ps

printf("%s\t%d\t%d\t%c\t%.1f\n", ps->name, ps->num, ps->age, ps->group, ps->score);

}

return 0;

}

运行结果:

Name Num Age Group Score

Zhou ping 5 18 C 145.0

Zhang ping 4 19 A 130.5

Liu fang 1 18 A 148.5

Cheng ling 2 17 F 139.0

Wang ming 3 17 B 144.5

二、枚举类型(enum)

三、共用体(union)

四、C语言中位运算

五、typedef给类型起个别名

typedef 是赋予现有类型一个新的名字,而不是创建新的类型。为了“见名知意”,请尽量使用含义明确的标识符,并且尽量大写。

typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。

typedef 和 #define 的区别

typedef 在表现上有时候类似于 #define,但它和宏替换之间存在一个关键性的区别。正确思考这个问题的方法就是把 typedef 看成一种彻底的“封装”类型,声明之后不能再往里面增加别的东西。

六、C语言中const:禁止修改变量的值

将 const 变量称为常量(Constant)。创建常量的格式通常为:

const type name = value;                                 const int Mac=100;             首选

const 和 type 都是用来修饰变量的,它们的位置可以互换,也就是将 type 放在 const 前面:

type const name = value;                                      int  const Mac=100;

但我们通常采用第一种方式,不采用第二种方式。另外建议将常量名的首字母大写,以提醒程序员这是个常量。

const 和指针

const 离变量名近就是用来修饰指针变量的,离变量名远就是用来修饰指针指向的数据,如果近的和远的都有,那么就同时修饰指针变量以及它指向的数据

const 和函数形参

const 通常用在函数形参中,如果形参是一个指针,为了防止在函数内部修改指针指向的数据,就可以用 const 来限制。

c语言结构体的位操作,C语言之路---结构体、位运算及预处理命令相关推荐

  1. msp430c语言编程指南,MSP430位操作C语言编程.pdf

    MSP430位操作C语言编程 AN50--MSP430位操作C 语言编程 (版本1.0) 2006.6 版本 草案 AN50――MSP430 位操作C 语言编程 最后更新 2005.7.12 页号 2 ...

  2. C语言谭浩强第三版第九章例题及课后题:预处理命令

    目录 9.1定义一个带参数的宏,使两个参数的值互换 9.2输入两个整数,求它们相除的余数 9.3求三角形面积 9.4(5)判断闰年 9.5分析下面的宏所定义的输出格式 9.6设计输出实数的格式 9.7 ...

  3. c+语言基础教程pdf下载,C语言基础教程.PDF

    目錄 Introduction 1.1 入门教程 1.2 helloworld 1.2.1 数值 .字符与字符串 1.2.2 运算符及表达式 1.2.3 选择结构与循环结构 1.2.4 函数基本概念及 ...

  4. c语言程序设计武汉大学出版社答案,C语言程序设计 高建华+实验与习题 刘英 武汉大学出版社...

    商品描述: C语言程序设计 高建华+实验与习题 刘英 武汉大学出版社 一套2本  分别信息如下: *************************************************** ...

  5. c语言编译常见错误提示,c语言编译常见错误

    c语言编译常见错误 (2012-04-17 21:33:53) 标签: 杂谈 分类: 计算机 1."c" not an argument in function sum 该标识符不 ...

  6. c语言指针说课稿,C语言说课稿..ppt

    C语言说课稿. LOGO " Add your company slogan " C语言程序设计 涧踏踪欠阉勺怕遏湃苏难殊爸魁伍葡啮模候榨追亭彦滩帖霖铰侯溃叭冠搂C语言说课稿.C语 ...

  7. 【C语言基础入门】2.C语言中四则运算、关系运算、逻辑运算与位运算

    文章目录 一.概述 二.四则运算(+,-,*,/,%) 三.关系运算(<,>,<=,>=,==,!=) 四.逻辑运算与位运算 五.深度剖析位运算 一.概述 C语言中支持下面4种 ...

  8. c语言shengchen图像,430编程C语言常识(IAR)(二)结构体与联合体

    回复: 107 430编程C语言常识(IAR)(二)结构体与联合体 (288035412) 出0入0汤圆 电梯直达 发表于 2012-4-7 18:36:29 | 只看该作者 |倒序浏览 |阅读模式 ...

  9. 【Go语言】【12】GO语言的结构体

    当我第一次接触到C语言时,就对结构体投入了极大的兴趣,认为这个东西以后大有作为,后来接触Java.C++,面向对象编程中的对象进入我的视线,经过了这么多年的磨练,回过头来再看结构体依旧是那么亲切:同时 ...

最新文章

  1. 本田da屏怎么进wince系统_弥补小型车短板,东风本田全新LIFE“来福酱”上市
  2. 挽救Centos7.0
  3. docker核心网络原理详解
  4. 新研究:长寿又健康的秘诀
  5. sqlserver查询语法
  6. 如何在CentOS 7上使用HAproxy Loadbalancer设置Percona XtraDB集群(负载均衡)
  7. C#操作 excel表格
  8. 在页面显示html文件,把选择的文件显示在页面上 #1《 HTML5:文件 API 》
  9. Paging Structures in the Different Paging Modes
  10. python画简便的图-python中简单易学的绘图:用turtle画太极图
  11. Android中将一个图片切割成多个图片
  12. 推荐系统的常用算法概述
  13. [译]使用YUI 3开发Web应用的诀窍
  14. 线代 | 矩阵的迹 向量内积如何转化为迹
  15. SEO到了岌岌可危的时刻吗?
  16. 人物-胡玮炜:胡玮炜
  17. 调用Android原生裁剪方式裁剪图片并保存
  18. 如何快速定位页面(江湖故人就是个铁憨憨)即时相关性?
  19. Fastreport VCL 4.15.6 for Delphi 4 ~ XE 5
  20. 经典物理建模钢琴-4Front TruePianos v1.9.8 WiN-MAC

热门文章

  1. win10系统下载-靠谱推荐
  2. Jsoup(二)-- Jsoup查找DOM元素
  3. 【转载】COM 组件设计与应用(四)——简单调用组件
  4. [zz]mysql 和 mongo db 语法对比
  5. struts2下拉框在不同情况下的各种用法
  6. MVC架构在Asp.net中的应用和实现
  7. 牛客网-剑指offer 第一题(二维数组中的查找)
  8. Git之深入解析如何使用Git调试项目源码中的问题
  9. PyTorch tensorboard报错:TensorBoard logging requires TensorBoard version 1.15 or above
  10. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - H. 四平方和