精华内容
下载资源
问答
  • C语言结构体与共用体.ppt第九章 结构体与共用体 内容提要 1结构体类型2结构体数组3结构体指针变量4链表5共用体6枚举类型7典型例题 结构体结构体是一种构造数据类型 自定义类型 结构体的使用分三步 1 定义结构体类型 ...

    C语言结构体与共用体.ppt

    第九章 结构体与共用体 内容提要 1结构体类型2结构体数组3结构体指针变量4链表5共用体6枚举类型7典型例题 结构体结构体是一种构造数据类型 自定义类型 结构体的使用分三步 1 定义结构体类型 2 定义结构体变量 3 使用结构体变量 9 1结构体类型 9 1结构体类型 结构体类型定义 struct 结构体名 类型标识符成员名1 类型标识符成员名2 struct是关键字 不能省略 合法标识符可省 无名结构体 成员类型可以是基本型或构造型 不能省略 结构体类型定义 例如 structstu struct是关键字 stu是结构体名 该结构体类型由5个成员组成 分别属于不同的数据类型longnum charname 20 charsex intage charaddr 30 结构体类型变量的定义 1 先定义结构体类型再定义变量其一般形式为 struct结构体名变量名列表 例如 structstustudent1 student2 定义两个stu类型的变量student1和student2 结构体类型变量的定义 2 在定义结构体类型的同时定义变量其一般形式为 struct 结构体名 中的内容是可选项 成员列表 变量名列表 例struct stu longnum charname 20 charsex intage charaddr 30 student1 student2 结构体类型变量的定义 注意 1 类型和变量是不同的概念 编译时只对变量分配空间 对类型不分配空间 2 结构体中的成员可以是普通变量 也可以是除自身之外的其它结构体变量 3 成员名可与程序中其它变量同名 二者不代表同一对象 互不干扰 4 结构体变量定义以后 系统为其分配存储空间 在VC 环境下分配存储空间的大小与所设置的字节对齐有关 例structdate 声明一个结构体变量 intmonth intday intyear structstu longnum charname 20 charsex structdatebirthday 成员birthday是structdata类型charaddr 30 student1 student2 例 pragmapack 1 设置为1字节对齐main structtest charm1 intm2 doublem3 m printf 变量m所占字节数为 d sizeof m pragmapack 恢复对齐状态 结构体变量的使用 结构体变量名引用成员 1 结构体变量的使用方式是分别使用变量中的各个成员 而不能整体使用 引用的一般形式 结构体变量名 成员名其中 运算符是成员运算符 2 如果成员本身又是结构体类型 则需使用成员运算符逐级访问 结构体变量的使用 3 同一种类型的结构体变量之间可以整体赋值 例如 student2 student1 4 可以使用结构体变量成员的地址 也可以使用结构体变量的地址 例如 scanf d 输出student1的首地址 结构体变量的初始化 struct结构体名 类型标识符成员名 类型标识符成员名 struct结构体名结构体变量 初始数据 例structstu longnum charname 20 charsex intage charaddr 30 structstustu1 11301 WangLin M 19 200BeijingRoad 形式一 结构体变量的初始化 例struct stu longnum charname 20 charsex intage charaddr 30 stu1 11301 WangLin M 19 200BeijingRoad struct 结构体名 类型标识符成员名 类型标识符成员名 结构体变量 初始数据 形式二 结构体变量的赋值 例structstu longnum charname 20 charsex voidmain structstustu1 stu1 num 11201 strcpy stu1 name LiPing 字符串复制函数stu1 sex M 注 stu1 name LiPing 是错误的 9 2结构体数组 结构体数组的定义 1 先定义结构体类型在定义结构体数组 例structstu longnum charname 20 charsex intage charaddr 30 structstustudent 5 结构体数组的定义 2 在定义结构体类型的同时定义结构体数组 例struct stu longnum charname 20 charsex intage charaddr 30 student 5 注 结构体数组中某元素成员的使用格式为 数组名 下标 成员名 结构体数组的初始化 形式一 例structstu longnum charname 20 charsex floatscore structstustudent 5 11001 Liping M 45 11002 Zhangping M 62 5 11003 Hefang F 92 5 11004 Chenbing F 87 11005 Wangming M 58 结构体数组的初始化 形式二 例struct stu longnum charname 20 charsex floatscore student 5 11001 Liping M 45 11002 Zhangping M 62 5 11003 Hefang F 92 5 11004 Chenbing F 87 11005 Wangming M 58 9 3结构体指针变量 1 结构体指针变量定义的一般形式struct结构体名 结构体指针变量名 2 通过结构体指针变量访问结构体变量成员的形式 1 结构体指针变量名 成员名 注意 运算符优先级比 运算符高 2 结构体指针变量名 成员名 其中 是指向成员运算符 很简洁 更常用 指向结构体的指针 例structstu longnum charname 20 charsex floatscore student 11001 Liping M 45 structstu p p 指向结构体数组的指针 structstu longnum charname 20 charsex floatscore stu 3 11001 LiPing M 45 11002 ZhangPing M 62 5 11003 WangMing F 92 5 main structstu p for p stu pnum p name p sex p score 结构体变量作函数参数 结构体变量作函数参数是采用 传值 方式 即分别为形参和实参分配内存空间 形实参结合 是将实参各成员值传递给形参所对应成员 注 实参和形参的结构体变量类型应当完全一致 include includestructstu longnum charname 20 charsex floatscore voidmain voidprint structstu structstustudent1 11001 Liping M 45 print student1 voidprint structstustudent 输出结构体student中各成员值 printf no ld name s sex c score f n student num student name student sex student score 指向结构体变量的指针作函数参数 结构体指针变量作函数参数是采用 传址 方式 形实参结合 是指将实参值 一个结构体变量的指针 传递给形参指针变量 通过指针来传递结构体变量的地址给形参 再通过形参指针变量引用结构体变量中成员的值 include includestructstu longnum charname 20 charsex floatscore voidmain voidprint structstu structstustudent 5 11001 Liping M 45 11002 Zhangping M 62 5 11003 Hefang F 92 5 11004 Chengling F 87 11005 Wangming M 58 structstu p1 printf numnamesexscore n for p1 student p1num p name p sex p score 9 4链表 什么是链表 所谓链表是指若干个数据项 每个数据项称为一个 结点 按一定的原则连接起来 每个数据项都包含有若干个数据和一个指向下一个数据项的指针 依靠这些指针将所有的数据项连接成一个链表 9 4链表 链表结构 structstu longnum char name sturctstu next structstu head 单向链表结构示意图 注 链表必须有一个头指针 任何操作都是在表头开始 动态存储分配函数 动态分配存储根据需要开辟或释放存储单元相关函数malloc函数calloc函数free函数注 应包含malloc h或stdlib h 动态存储分配函数 1 malloc函数 void malloc unsignedintsize 功能 在内存动态存储区中分配一个长度为size的连续 2 calloc函数 void realloc void mem address unsignedintnewsize 功能 改变mem address所指内存空间的大小为newsize长度 3 free函数 voidfree void ptr 功能 将指针变量ptr指向的存储空间释放 链表的操作 基本操作建立链表输出链表插入结点删除结点查找一个结点 建立链表 structstu p1 p2 head structstu malloc LEN 建立头结点head next NULL p1 head p2 structstu malloc LEN 建立第一个结点scanf ld f 建立链表 while p2 num 0 将建立的结点依次插入到链表中p2 next p1 next p1 next p2 p1 p2 p1始终指向链尾结点p2 structstu malloc LEN scanf ld f 输出链表 while p NULL 依次输出链表中各结点的值printf ld 5 1f n p num p score p p next p指针后移 插入一个结点 p1 head next p2 head while p0 num p1 num 删除一个结点 while num p1 num 将删除结点从链表中摘除 9 5共用体 几个不同的变量共占同一段内存的结构 称为 共用体 类型的结构 类型定义union 共用体名 成员列表 例union data charcval intinal floatfval 共用体类型变量的定义 1 先定义共用体类型 后定义变量 例 uniondataa b c 2 定义类型的同时定义变量 例union data charcval intinal floatfval a b c 注 在字节对齐方式为一个字节的情况下 分配给共用体的存储空间大小为成员中所占字节数最大的一个 字节对齐方式设置同例9 1 共用体变量的使用 共用体变量的使用方式和结构体相同 都是在定义了变量以后 用 变量名 成员名 的形式引用变量中的成员 而不能作为整体使用 例如 uniondataa p printf c d f a cval a inal a fval printf c d f p cval p inal p fval 9 6枚举类型 如果一个变量只有几种可能的值 则可以定义为枚举类型 所谓枚举是指将变量可能的取值一一列举出来 变量值只限于此范围内 只能取预先定义值的数据类型是枚举类型 类型定义enum枚举类型名 枚举元素列表 例如 enumweekday sun mon tue wed thu fri sat 枚举变量定义 1 定义枚举类型的同时定义变量 enum 枚举类型名 枚举常量列表 枚举变量列表 2 先定义类型后定义变量 enum枚举类型名枚举变量列表 例如 enumweekday sun mon tue wed thu fri sat 定义枚举类型enumweekday enumweekdayweek1 week2 注 可以用枚举常量给枚举变量赋值 例如 week1 wed week2 fri 枚举变量的使用 includemain enumseason Spring Summer Autumn Winter enumseasonsea for sea Spring sea Winter sea switch sea caseSpring printf Spring n break caseSummer printf Summer n break caseAutumn printf Autumn n break caseWinter printf Winter n break 9 7枚举类型 例9 15 有以下程序 include include string h typedefstruct charname 9 charsex floatscore 2 STU voidf STUa STUb Zhao m 85 0 90 0 inti strcpy a name b name a sex b sex for i 0 i 2 i a score i b score i main STUc Qian f 95 0 92 0 f c printf s c 2 0f 2 0f n c name c sex c score 0 c score 1 程序的运行结果是 A Qian f 95 92B Qian m 85 90C Zhao f 95 92D Zhao m 85 90程序分析 此题目主要考查参数的传递问题 函数中形参的值改变不会影响实参 因此在函数调用f c 中形参a的值不会改变实参c的值 答案为A 9 7枚举类型 例9 16 以下程序中函数fun的功能是 统计person所指结构体数组中所有性别 sex 为M的记录的个数 存入变量n中 并作为函数值返回 请填空 include defineN3typedefstruct intnum charnam 10 charsex SS intfun SSperson inti n 0 for i 0 i N i if M n returnn main SSW N 1 AA F 2 BB M 3 CC M intn n fun W printf n d n n 程序分析 此题目主要考查结构体中成员的引用 因为题目中要求统计性别为M的记录的个数 每次循环时都要判断结构体W中成员sex的值是否等于M 因此if语句判断的条件应该为person i sex M Theend

    展开全文
  • 第九章 结构体与共用体 第九章 结构体与共用体 结构体 结构体变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 结构体和指针 共用体 9.1 结构体 结构体是一种构造数据类型 用途把不同类型的数据组合成一...
  • 结构体与指针 结构体类型的概念 在实际生活中经常要用多种属性来描述一个对象如在学籍管理中经常用姓名学号各科成绩等共同反映一个学生的基本情况由于这些数据项的类型各不相同若用简单变量分别表示难以反映出它们...
  • 结构体与链表PPT

    2019-04-05 16:38:42
    结构体与链表的课件,供小白使用,其中包括有链表的创建,链表节点的插入,节点的删除,链表的展示。不过其中讲解得有些大概,需要有一定的c语言基础,及对指针有一定的了解。
  • * 第12章 结构体 共用体和枚举 结构体类型的定义变量说明 结构变量的引用初始化 结构体数组 结构体指针 共用体 枚举类型 教学内容 * 思考一个问题 在程序里表示一个人姓名年龄性别怎么表示 想表示多个人呢 如何...
  • 第七章 文件 结构体;第一节 文件操作;一重定向版; 使用方法 因为文件指针使用的是标准流文件因此我们可以不定义文件指针接下来我们使用freopen)函数以只读方式r(read)打开输入文件slyar.in 格式freopen"slyar.in,...
  • 用整个结构体变量作实参和形参向函数传递结构体的完整结构 单向值传递函数内对结构内容的修改不影响原结构开销大 8.4 结构体与函数 结构体参与函数运算的几种形式 3. 向函数传递结构体的首地址 用结构体数组或者...
  • 使用结构体指针变量引用成员形式 *结构体指针名.成员名 结构体指针名->成员名 结构体变量名.成员名 指向运算符 优先级: 1 结合方向从左向右 void main) { struct student { long int num; char name[20]; char sex; ...
  • 第7章 结构体与共用体 学习目标与要求 1掌握结构体类型的类型说明 2掌握结构体类型变量和数组的定义及引用 3掌握链表的使用 4了解共用体的定义及引用 本章要点 结构体类型与结构体变量 结构体数组 结构体指针 链表 ...
  • 1,数据结构算法 C语言的基础知识,,2,主要内容,C语言简介 数据类型声明 运算符表达式 数组 指针 结构体,,,3,简单的C语言源程序,# include “stdio.h“ main( ) { printf(“ * * * * * * * * * \n“);...

    1,数据结构与算法 C语言的基础知识,,2,主要内容,C语言简介 数据类型与声明 运算符与表达式 数组 指针 结构体,,,3,简单的C语言源程序,# include “stdio.h“ main( ) { printf(“ * * * * * * * * * \n“); /* “\n“表示换行 */ printf(“ * Hello ! * \n“); printf(“ * * * * * * * * * \n“); },主函数,输出函数,注释,,,4,C程序的构成,一个C语言的源程序通常由一个或若干个函数构成,函数是C程序的基本单位,这些函数可以包含在一个或者多个源文件内。 一个C程序中必须有一个main函数,它可以放在程序的任何地方。程序总是从main函数开始执行。 函数可以是系统提供的库函数,也可以是用户根据自己需要编制的自定义函数。,,5,主要内容,C语言简介 数据类型与声明 运算符与表达式 数组 指针 结构体,,,6,数据类型与声明,,数据类型,,指针类型,空类型,构造类型,,,7,在程序运行过程中其值不能改变的量叫做常量。 常量分为整型常量(如果是长整型,要在数字后面加L) 、实型常量、字符型常量等。 const float PI=3.1415926 符号常量: 值在本文件内不能改变,也不能再赋值。 #define MAXSIZE 16 C语言规定标识符只能由字母打头,后面跟字母、数字或下划线,大小写不通用。(在Turbo C中标识符的长度可以超过8个字符) 一般符号常量名用大写,变量名用小写,以示区别。,常量,,8,在程序运行过程中其值可以改变的量叫做变量。 变量要先定义(即使用类型标识符作说明)再使用。 int num; char name;,变量,,9,整型数据,C语言中的整型常量可以用十进制、八进制和十六进制表示。八进制数以0开头,十六进制数以0x开头。(0为数字0) C语言中的整型变量分为基本型、短整型、长整型、无符号型。 一般短整型不大于基本型,长整型不小于基本型。,,10,字符型数据,C语言中的字符型数据有: 单字符常量 转义字符常量 字符串常量 字符变量,,11,单字符常量,单字符常量用单引号括起来 类型标识符为char,输出时用%c 表示。 按ASCII码存储,每个字符占一个字节。 给字符变量赋值时可以赋予字符的ASCII码。 例如:char a=65的结果是a变量中存放一个字母A 。 main ( ) {char a=‘a’,b=’b’,c=’c’,d=68; a=a+1;b=b+2;c=c+3;d=d+4; printf(“%c%c%c%c\n“,a,b,c,d); } 运行结果:bdfH,,12,字符串常量,字符串常量用双引号括起来 “CHINA“ √ char c; c=‘a’; × char c; c=“a“ 没有字符串变量. 用数组来存放,数组长度大于字符串长度。 char c[10]=“China“; 输入输出printf(“%s“,c); scanf(“%s“,c); 字符串处理函数: puts(c);gets(c);strcat(str1,str2);strcpy(str1,str2);,,13,主要内容,C语言简介 数据类型与声明 运算符与表达式 数组 指针 结构体,,,14,算术运算符及表达式,+ 、-、*、/、% (取余) 例如:7%4 得 3 注意:float型数据不能做%运算 优先级:先*、/、 %,后+ 、- 结合性:自左至右,,15,自增和自减运算,+ +自增、 - -自减 例如:++a 、 a ++相当于 a=a+1 -- a 、 a --相当于 a=a - 1 但是:++a 是先自增再使用, a ++是先使用再自增。 注意:float型数据不能做++或- -运算。,,16,主要内容,C语言简介 数据类型与声明 运算符与表达式 数组 指针 结构体,,,17,数组,数组的定义方式 一维数组的定义方式为: 类型说明符 数组名[常量表达式] int a[5]; 5个元素是:a[0]、a[1]、a[2]、a[3]、a[4] 。 二维数组的定义方式为: 类型说明符 数组名[常量表达式] [常量表达式] float a[3][2],a数组有三行两列共6个元素,分别是:a[0][0]、a[0][1]、a[1][0]、a[1][1]、a[2][0]、a[2][1];,,18,数组名的命名规则和变量名相同,下标从0开始,方括号内是元素个数。 方括号内的常量表达式的值必须是整型数,不能是变量。 当定义数组语句中不同时给变量赋值时,方括号内不得为空。 二维数组在内存中是按行存放的。 数组名代表的是该数组的起始地址. C语言允许使用多维数组。,关于数组的说明,,19,数组的赋值,在定义数组后数组中的各个变量自动取随机数。 int b[10]; b[1]=3; 将3赋给b[1],其他元素为随机数 。 可以在定义数组时对数组中的全部变量或部分变量赋值。也可以在以后的语句中为变量赋值。 int a[5]={3,4,5,6,7}; 将五个数依次赋给a数组 在定义数组时为部分变量赋值后,其他元素为0 。 int b[10]={0} int b[10]={3,2,1,0}; 将四个数依次赋给b[0]~b[3],其他元素为0 在给全部元素赋初值时,可以不用给出长度. int a[]={1,2,3,4,5},,20,主要内容,C语言简介 数据类型与声明 运算符与表达式 数组 指针 结构体,,,21,指针,是C语言的一个重要概念 可以有效地表示复杂的数据结构 能动态分配内存 能方便地使用字符串 能有效而方便地使用数组 在调用函数时能得到多于一个的值 能直接处理内存地址,,22,指针,地址和指针 变量的指针和指向变量的指针变量 数组与指针,,,23,地址的概念,程序定义了一个变量,在编译时就给这个变量分配内存单元,内存区的每一个字节有一个编号,这就是“地址“ 在程序中通过变量名来对内存单元进行存取操作 程序编译以后已经将变量名转换为变量的地址。 scanf(“%d“,,,变量i 变量j 变量k,2000 2002 2004,3010,变量i_pointer,,24,地址和指针,一个变量的地址称为该变量的指针。通过变量的地址能找到该变量在内存中的存储单元,从而得到它的值。 变量i访问方式: 直接访问:按变量地址存取变量值的方式. i=3; printf(“%d“,i); 间接访问: *表示指向,定义 i_pointer,* i_pointer * i_pointer=3; scanf(“%d“,,,25,指针,地址和指针 变量的指针和指向变量的指针变量 数组与指针,,,26,指向变量的指针变量,存放地址的变量叫做指针变量。 在一个指针变量中只能存放同一类型变量的地址。指针变量必须先定义,指定它的类型,才能使用。 基类型 *指针变量名;例如:int *a,*b; 指向某数据的指针变量存放的是该数据的首地址,也就是说,指向的是该数据的首字节。 int占2个字节,char占1个字节,float占4个字,… 使一个指针变量指向另一个变量 指针变量名=,,27,指针变量的引用-1,在表达式中,可以使用以下两个运算符 & 取地址运算符,如:m=&a 将a的地址送入m * 指针运算符(间接访问运算符) 如:*m 就是指针变量m所指向的变量,也就是a。 因此,有了m=&a 后,就有了*m=a 。 &*m与&a相同 ,*&a与a等价 (*m)++相当于a++, *m++相当于*(m++),&a,,,a,m,*m,,28,指针,地址和指针 变量的指针和指向变量的指针变量 数组与指针,,,29,数组的指针和指向数组的指针变量,数组元素的指针是指数组元素的地址。 int a[10]; (定义a为包含10个整型数据的数组) int *p; (定义p为指向整型变量的指针变量) p=,a[0],a[9],&a[0],,p,,30,通过指针引用数组元素-1,可以通过指针为数组元素赋值。 int a[10], *p; p= p=p+1 此时,p指向数组a数组的第二个元素。*(p+1)=a[1],a[0],a[9],,p,a数组,,p+1,a+1,a[1],a[2],,p+i,a+i,,p+9,a+9,,31,通过指针引用数组元素-2,指向数组的指针变量也可以带下标。 例如:int a[10];int *p= 可以使用a[i]、p[i]、*(a+i)或*(p+i)引用数组中的第i+1个元素。 移动指针可以使用p++、p--,但注意指针不能超出数组元素的范围。 ++和*是同优先级,从右至左的结合方向。例如* p++和*(p++)等价 指针不允许进行乘除运算。,,32,主要内容,C语言简介 数据类型与声明 运算符与表达式 数组 指针 结构体,,,33,结构体,什么时候需要结构体类型? 结构体类型变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表,,,34,什么时候需要结构体类型?,一类用户 自定义 的 数据类型 struct struct student { int num; char name[20]; char sex; int age; float score; char addr[ 30]; };,,35,结构体变量的定义-1,struct 结构体名 {成员表列}; 类型名 成员名 先定义结构体类型再定义变量名 struct abc { int a; char b; float c; char d[30];}; 以上定义了一个结构体类型,并指定了其中各成员的名字和它们的类型。 再有: struct abc xx1,xx2,xx3;,定义了三个变量:xx1、xx2和xx3,它们都具有struct abc的类型结构。,,36,结构体变量的定义-2,在定义类型的同时定义变量,一般形式为: struct 结构体名 { 成员表列 }变量名表列; 例如:struct abc { int a; char b; float c; char d[30]; } xx1,xx2,xx3; 结果和前面一样。,,37,结构体变量的定义-3,也可以直接定义结构体变量 struct { 成员表列 }变量名表列;,,38,结构体变量的定义-4,结构体变量的成员,可以单独使用,作用与地位相当于普通变量,成员也可以是一个结构体变量 struct date { int month;int day;int year;}; struct student {int num; char name[20]; char sex; struct date birthday; /*birthday 是struct date 类型*/ } student1, student2;,,39,结构体变量占用的内存,只有在定义变量后,才为该变量分配内存单元。结构体变量所占的内存长度等于每个成员长度之和。 #include main ( ) { struct date {int year,month,day;}today; printf(“%d\n“, sizeof(struct date)); } 运行结果:12 (VC++环境下),,40,结构体,什么时候需要结构体类型? 结构体类型变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表,,,41,结构体变量的引用,不能对结构体变量整体进行输入输出,只能对结构体变量中的成员分别进行输入和输出。 引用结构体变量中各个成员的方式为: 结构体变量名.成员名 可以对变量的成员赋值 student1.num=99082; 如果成员又是结构体类型,则要用多个成员运算符,找到最低一级的成员。 student1.birthday.month,,42,结构体,什么时候需要结构体类型? 结构体类型变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表,,,43,结构体变量的初始化,可以在定义时指定初始值 #include “stdio.h“ main () { struct student {int num; char name[20]; char sex; } a={89031, “Li Lin“,'M'}; printf(“ No. %d\n name:%s\n sex:%c\n“,a.num,a.name,a.sex); },,44,结构体,什么时候需要结构体类型? 结构体类型变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表,,,45,结构体数组,和定义结构体变量相似,只需要说明其为数组即可 struct student { int num; char name[20]; char sex; } ; struct student stu[3]; struct student { int num; char name[20]; char sex; } stu[3];,,46,结构体数组初始化,struct student {int num; char name[20]; char sex; } stu[3]={{89031, “Li Lin“,'M'}, {89032, “Liu Ying“,'M'}, {89036, “Wang Min“,'F'}};,,47,结构体,什么时候需要结构体类型? 结构体类型变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理链表,,,48,指向结构体类型数据的指针,一个结构体变量的指针就是该变量占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量。 指向结构体变量的指针 struct student { int num; char name[20]; char sex; float score; } ; struct student stu1; struct student *p; p= 为了方便,可以把(*p).num改用p-num来代替,以下三种形式等价: 结构体变量名.成员名 (*p).成员名 p-成员名,,49,结构体,什么时候需要结构体类型? 结构体类型变量的定义 结构体变量的引用 结构体变量的初始化 结构体数组 指向结构体类型数据的指针 用指针处理单链表,,,50,动态申请内存,数组的长度是预先定义好的,在整个程序中固定不变。C语言中不允许定义动态数组。 实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。,,51,C语言动态内存的函数,分配内存空间函数 malloc 调用形式: (类型说明符*) malloc(size) 功能:在内存的动态存储区中分配一块长度为“size“字节的连续区域。函数的返回值为该区域的首地址。 pc=(char *)malloc(100); 释放内存空间函数free 调用形式: free(void *ptr); free(pc);,

    展开阅读全文

    展开全文
  • C语言基础培训ppt

    2019-02-14 23:19:36
    内容包括:C语言基础、变量和数据类型、运算符、条件结构、循环结构、数组、指针、函数、字符串、结构体、编译预处理、位运算、数据结构和算法初步、编译运行、高质量变成规范、文件操作、软件漏洞、链表
  • c语言课件资料ppt

    2018-09-10 22:03:07
    c语言入门资料 第1章 C程序设计基础 第2章 标志符数据类型 第3章 运算符和表达式 第4章 控制结构语句 第5章 数组 第6章 函数 第7章 指针 第9章 结构体 第10章 位运算 第11章 文件
  • C语言基础课件 PPT

    2018-08-28 10:29:28
    第一章 C语言的发展、特点程序结构 , 第二章 基本数据类型、运算符和表达式, 第三章 基本语句顺序结构, 第四章 选择结构, 第五章 循环结构, 第六章 数组, 第七章 函数, 第八章 指针, 第十章 结构体, 第...
  • C语言ppt课件

    2019-03-08 11:29:05
    C语言课件,总共10章,包括概述、数据描述、输入输出、流程设计、数组、函数、预处理、指针结构体与共用体、文件
  • C语言课件(PPT

    2014-05-01 23:59:38
    本课件供十二章 第一章 C语言概述 第二章 数据类型、运算符与表达式 第三章 算法和最简单的C程序设计 第四章 逻辑运算和判断选择控制 第五章 循环控制 ...第十章 结构体与共用体 第十一章 位运算 第十二章 文件
  • 整书C语言程序设计,初学必备!(C语言概述,基本数据类型,数据的输入与输出,C语句,函数,预处理,数组,结构体与共同体,指针,位运算,文件)
  • 本节是学习C语言指针指针与一般变量,指针与数组,指针与结构体,指向指针指针。   下载 图片格式的课件(PPT课件转换为JPG图片)(以图片方式查看,可以在MP4上查看)   下载 Powerpoint课件 (在装有...

    本节是学习C语言指针:指针与一般变量,指针与数组,指针与结构体,指向指针的指针。

     

    下载 图片格式的课件(PPT课件转换为JPG图片)(以图片方式查看,可以在MP4上查看)

     

    下载 Powerpoint课件 (在装有PowerPoint的计算机上可以打开使用)

    展开全文
  • 7.1 结构体与 结构体变量 7.2 结构体数组 7.3 结构体指针 7.4 结构体与函数 7.5 结构体的应用 7.6 联合体 7.7 位段 7.8 枚举 7.9 用typedef定义类型 7.1 结构体与结构体变量 7.1.1 结构体 结构体是一种构造数据类型 ...
  • 目录 第一章 绪论 第二章 算法流程图 第三章 数据类型运算符和表达式 第四章 程序的控制结构 第五章 函数 第六章 数组 第七章 指针 第八章 结构体 第九章 文件操作 第二章 算法流程图 1程序数据结构算法 2简单...
  • 主讲教师刘 丹;C语言程序设计;第一章 C语言概述; 1.1 C语言出现的历史背景;二发展过程?...3. 数据结构丰富 除基本类型外, 有指针, 结构体共同体等类型;6. 可机器硬件打交道直接访问内存地址具有 高
  • 第7章 结构联合 构造类型二 结构和联合的概念 7.1 结 构 结构变量的说明 无名结构方式说明变量 结构变量的引用 结构数组 举例统计三个候选人的票数 结构指针 举例 结构函数参数 7.2 联合(union) 联合结构的...
  • c语言ppt教程,全

    2008-10-03 21:20:08
    c语言ppt教程,全 第1章 程序设计基础知识 第2章 C语言概述 第3章 数据类型、运算符和表达式 第4章 顺序结构程序设计 ...第11章 结构体与共用体 第12章 位运算 第13章 文件 第14章 C++对C的扩充 第15章 C++面向对象基础
  • 程序设计技术 C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构 数组及其应用 函数C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算...
  • * 第10章 结构体与共用体 学习内容指南 10.1 结构体类型的声明 10.2 结构体变量的定义初始化和引用 10.3 结构体数组 10.4 指向结构体变量的指针 10.5 动态单链表 10.6 共用体 前言 首先要自己声明结构体学生的数据...
  • 系统的介绍C语言,从基础篇...函数,,第10 章 指针,,第11章 编译预处理 ,,第12章 指针的高级应用 ,,第13章结构体、共同体和枚举类型 ,,第14章 文件 ,,第15章 位运算 。。。绝对好的资源,,不下后悔啊。。。
  • C语言第二章数据类型、运算符表达式A.pptC语言程序设计,第2章 数据类型、运算符表达式,本章主要学习任务,C的数据类型; 2.常量、变量; 3. 常用基本数据类型的表示、机内存储、变量分类; 4. 数值型数据混合运算...

    C语言第二章数据类型、运算符与表达式A.ppt

    C语言程序设计,第2章 数据类型、运算符与表达式,本章主要学习任务,C的数据类型; 2.常量、变量; 3. 常用基本数据类型的表示、机内存储、变量分类; 4. 数值型数据混合运算及类型转换规律。,2.1 C的数据类型,数据类型数据的存在或组织形式 基本类型 指针类型 构造类型 空类型,整型 字符型 实型 枚举型,单精度型 双精度型,数组类型 结构体类型 共用体类型注意C语言中的数据有变量与常量,它们分别属于上述这些类型。,1、不同的数据类型有不同的取值范围。 2、不同的数据类型有不同的操作。 3、不同的数据类型即使有相同的操作有时含义也不同。 4、不同的数据类型对计算机可能出现的错误不同。,2.2 常量与变量,一、常量 字面常量 符号常量 (用标识符代表) 定义方法 define PI 3.1415,不是C语句,不必在行末加分号。 该命令是用标识符代替一个字符串,不作正确性检查 使用符号常量的好处 含义清楚、见名知意。 修改方便、一改全改。,二、变量 变量必须先定义后使用 变量名、变量值、存储单元的关系 标识符标准 1、组成字母、数字、下划线,且首字符不能为数字 合法abc, _321, _1a,非法 2aa, ac,_c.9 2、长度 3、大写小写不同 SUMsum 4、选择标识符的时候要“见名知意”,符号常量与变量的关系 符号常量值在作用域内不能改变,不能被再赋值;常用大写 变量值是可以改变,可以多次赋值的;常用小写,2.3 整型数据,一、整型常量 十进制整数 八进制整数 十六进制整数 注C语言整常数没有二进制整数形式,二、整型变量 内存中的存放形式 以二进制补码形式存放 每个基本整型变量在内存中占4个字节VC环境中 整型变量的分类 基本类型 int 可加修饰符short 、long、signed、unsigned,整数类型,3. 整型变量的定义 定义格式数据类型名 变量名; 可定义多个相同类型的变量。各个变量用“,”分隔。类型说明与变量名之间至少有一个空格间隔。 最后一个变量名之后必须用“;”结尾。 变量说明必须在变量使用之前。 可以在定义变量的同时,对变量进行初始化。,4. 整型数据的溢出 整型数最大允许值1,最小允许值-1,会出现什么情况 例短整型数据的溢出 void main short a32767,b; ba1; printf“ad,bdn“,a,b; ,三、整型常量的类型 整型常量赋值给整型变量时,如何匹配 值在-3276832767范围内的整数,可以赋值给int和short int 、long int型变量。 如果值超过了以上范围,在-21474836482147483647范围内,可以赋值给int、long int型变量。,2.4 实型数据,一、实型常量 十进制小数形式 .123、123.、123.0 指数形式e之前必须有数字,e后面指数必须是整数 规范化的指数形式字母e之前的小数部分中,小数点左边应有且只有一位非零数字,二、实型变量 实型数据在内存中是以指数形式存放的 实型变量的分类 单精度 float 4字节 双精度 double 8字节 长双精度 long double 10字节 3. 实型数据的舍入误差 因为实型变量的有效位以外的数字将被舍去,由此会产生误差,void main float a; double b; a33333.33; b33333.33333; printf“af,bfn“,a,b; 三、实型常量的类型 实型常量可以赋给float, double, long double ,按变量类型截取实型常量中相应的有效数字位数,注意 不要试图用一个实数精确表示一个大整数,记住浮点数是不精确的。 实数一般不判断“相等”,而是判断接近或近似。 根据要求选择单精度、双精度。,2.5 字符型数据,一、字符常量 直接用单引号括起来, 使用字符的转义表示法表示(ASCII码表示) 特殊字符 预先定义的一部分常用的转义字符。如n 换行,t水平制表。,转义表示格式ddd或xhh其中ddd,hh是字符的ASCII码,ddd八进制、hh十六进制。 注意不可写成0 xhh或0ddd整数。,二、字符变量 字符型变量是用来存放字符数据,同时只能存放一个字符。 定义形式char aa,bb; 所有编译系统都规定一个字符变量在内存中占一个字节。 三、内存中的存储形式 以字符的ASCII码,以二进制形式存放,占用1个字节。,字符型数据和整型数据之间可以通用(当作整型量)。具体表现为 可以将整型量赋值给字符变量,也可以将字符量赋值给整型变量。 可以对字符数据进行算术运算 一个字符数据既可以以字符形式输出,也可以以整数形式输出。 注意字符型数据作为整数使用范围 0-255(无符号) -128-127(有符号)。,例给字符变量赋以整数(字符型、整型数据通用) main /* 字符a的各种表达方法 */ char c1ax61141 char c50 x61; char c60141; printf“c1c,c2c,c3c,c4c,c5c,c6cn“,c1,c2,c3,c4,c5,c6; printf“c1d,c2d,c3d,c4d,c5d,c6dn“,c1,c2,c3,c4,c5,c6; ,四、字符串常量 字符串常量是一对双引号(“”)括起来的字符序列。 注意 字符常量与字符串常量。如“a”和a。 C规定以0(ASCII码为0的字符)作为字符串结束标志。 不能将字符串赋给字符变量。 C语言没有专门的字符串变量,如果想将一个字符串存放在变量中,可以使用字符数组。,2.6 变量赋初值,C语言允许在定义变量的同时使变量初始化。 可以使被定义的变量的一部分赋初值 对几个变量赋同样的初值 int a3,b3,c3; 错误的赋值表示int abc3;,2.7 各类数值型数据的混合运算,整型、实型、字符型数据之间可以混合运算 进行运算时,不同类型的数据先转换成同一类型,然后进行计算 转换的方法 自动转换(隐式转换) 强制转换。,1.自动动转换(隐式转换) 混合运算时,由编译系统自动完成。转换规则(参看图2-10) 赋值运算,赋值号右边的类型转换为左边的类型。这种转换是截断型的转换,不会四舍五入。 2.强制转换 一般形式(类型说明符)(表达式) 功能把表达式的结果强制转换为类型说明符所表示的类型。,例如inta 将a的结果强制转换为整型量。 intxy 将xy的结果强制转换为整型量。 floatab 将a的内容强制转换为浮点数,再与b相加。 说明 类型说明和表达式都需要加括号(单个变量可以不加括号) 无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。,例强制类型转换 void main float f5.75; printf“intfdn“,intf; printf“ffn“,f; ,2.8 算术运算符和算术表达式,C语言运算符控制语句和输入输出以为的基本操作都作为运算符处理 P31 表达式使用运算符将常量、变量、函数连接起来,构成表达式。 一、算术运算符 ,-,*,/, 1.两个整数相除,结果为整数,舍入方式为“向零取整” 2.求余运算,两侧均应为整型数据,余数的符号与被求余数符号相同。,二、算术表达式 1. 算术表达式用算术运算符将运算对象连接起来的、符合C语法规则的式子。 2. 运算对象可以是常量、变量、函数等。 合法的C表达式a*b/c-1.5a 注意 C语言算术表达式的乘号(*)不能省略 C语言表达式中只能出现字符集允许的字符。 C语言算术表达式只使用圆括号改变运算的优先顺序(不要指望用)。,3.(算术)运算符的优先级与结合性P.325附录 C语言规定了运算符的“优先级”和“结合性”。 优先级别相同,则按规定的“结合方向”处理。 左结合性 右结合性 对于复杂表达式为了清晰起见可以加圆括号“()”强制规定计算顺序。,四、自增、自减运算符 i,i i,i 注意 前置运算i,i,先自增、减,再参与运算; 后置运算i,i,先参与运算, 再自增、减。 例如i3,分析ji; ji; 自增、减运算符不能用于常量或表达式。,五、表达式使用中的问题 1.表达式中子表达式的求值顺序; 2. C编译系统在处理时尽可能多地将若干字符组成一个运算符(在处理标识符、关键字时也按同一原则处理); 3. 调用函数时,实参的求值顺序。,2.9 赋值运算和赋值表达式,一、赋值运算符 赋值符号“”就是赋值运算符 二、类型转换 赋值运算时,当赋值运算符两边数据类型不同时,先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。,1.实型数据赋给整型变量 2. 整型数据赋给实型变量 3.单双精度常量赋值给实型变量 4.字符型赋给整型变量 5.整型数据赋给字符型变量,三、复合的赋值运算符 “”之前加上其他二元运算符,构成复合的运算符 a3;对应于aa3; 四、赋值表达式 变量表达式 将赋值运算符右侧的“表达式”的值赋给左侧的变量,赋值表达式的值就是被赋值的变量的值,2.10 逗号运算符和逗号表达式,逗号表达式用逗号将两个表达式连接起来 形式 表达式1,表达式2 求解过程 自左向右,先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值,可以扩展到N个表达式 优先级所有运算符中优先级最低 例a3*5,a*4 注意函数参数也是用逗号来分隔的,

    展开全文
  • 第 2 章 C语言的基本数据类型表达式 2.1 C语言的基本数据类型 2.2 常量和变量 2.3 运算符表达式 2.4 数据类型转换 字符型char 整型short,int,long,unsigned 单精度型float 实型 双精度型double 枚举类型enum ...
  • 第4章 Keil C51单片机开发环境;4.1 C语言编程基础;...4.1.6 数组与指针;4.1.6 结构体与联合体;4.1.7 类型定义;4.1.8 宏定义与条件编译;4.2 Keil C51开发工具;4.2 Keil C51开发工具;4.2.1 Vision 3集成开发环
  • C语言程序设计;课程要求;课程特点 C是基础接触各种数据类型及表达式基本语句语法...简单程序设计(顺序选择循环结构程序设计 数组 函数 指针 结构体与共用体 文件;第一章 C语言概述;1.1 C语言发展历史 程序设计语言的发

空空如也

空空如也

1 2
收藏数 38
精华内容 15
关键字:

c语言结构体与指针ppt

c语言 订阅