第3章 指针、函数及自定义数据类型.ppt_第1页
第3章 指针、函数及自定义数据类型.ppt_第2页
第3章 指针、函数及自定义数据类型.ppt_第3页
第3章 指针、函数及自定义数据类型.ppt_第4页
第3章 指针、函数及自定义数据类型.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 指针、函数、及其他数据类型,指针 函数 结构体 共用体 枚举,3.1 指针,指针是一种非常重要的数据类型,利用指针变量可以表示各种数据结构,方便地引用数组和字符串,像汇编语言一样处理内存地址。指针极大地丰富了语言的功能,运用指针编程是语言最主要的风格之一。,3.1.1 指针的基本概念,指针变量的定义 数据类型符 *指针变量名; int *p; double *pd; int *p1, *p2; int *p1, p2;,3.1.1 指针的基本概念,3.1.1 指针的基本概念,3.1.1 指针的基本概念,指针的运算 指针是一个内存地址值,它是一个无符号的整数,可以进行加法和减法运算,但不

2、允许进行乘法、除法和两个指针值的相加运算。 int a5 = 1, 2, 3, 4, 5; int *p1 = ,3.1.1 指针的基本概念,void指针类型 void *p; 上面的定义中,p仍然是一个指针变量,有自己的内存空间,占用4个字节,但是没有指定它指向哪种类型的变量。在这种情况下,不能对指针变量进行运算,否则会导致编译错误。,3.1.1 指针的基本概念,指针的类型转换 (TYPE *)p 强制类型转换的结果是生成一个新的指针,该指针的类型为TYPE *,所指向的类型为TYPE,其他属性都不变,所指向的地址仍为原来的地址。,3.1.1 指针的基本概念,指向指针的指针 数据类型符 *指

3、向指针的指针变量名; int *pp; int i = 6; int *p; int *pp; p = ,3.1.2 指针与数组的互操作,数组名和指针变量是两个不同的概念,但他们都可以用来对数组或数组元素进行引用。 int a10; int *p; p=a; p= 对数组元素的引用既可以使用下标法,也可以使用指针的表示方法,如: p+n与a+n表示数组元素an的地址,即,3.2 函数,函数的定义与声明 函数的调用与参数传递 变量的作用域 变量的存储类型 外部函数和内部函数 函数的递归 函数指针,3.2.1 函数的定义与声明,函数对应于程序的模块,需要先定义后使用。 返回值类型符 函数名(形式参

4、数列表) 定义部分; 执行语句部分; return语句的格式为: return 表达式; return(表达式);,3.2.2 函数的调用与参数传递,函数调用的一般格式为: 函数名(实际参数列表) 函数参数传递是调用函数和被调用函数在调用发生时进行通信的方法。基本的参数传递机制有: 值传递 地址传递,3.2.3 变量的作用域,局部变量是在函数内部定义的变量或函数的形式参数。 int func (int a,int b) int i; int main() int i, j; ,3.2.3 变量的作用域,全局变量是在函数外部定义的变量 int x, y; void func() int main

5、() /* int y; */ ,3.2.3 变量的作用域,声明全局变量: extern 数据类型符 全局变量名; 使用全局变量可以减少函数调用过程中实际参数和形式参数之间数据传递带来的时间消耗。但也会带来了一些问题 全局变量破坏了函数的封装性 全局变量使函数代码的可读性降,3.2.4 变量的存储类型,定义一个变量的完整形式应为: 存储类型说明符 数据类型符 变量名; 存储类型说明符有四种: auto(自动变量) extern(外部变量) static(静态变量) register(寄存器变量),3.2.5 外部函数和内部函数,当一个程序由多个源文件组成时,可以指定一个文件中的函数能被其他文件

6、调用,也可以指定该函数只能被本文件使用。从这个意义上讲,函数可以分为: 外部函数 内部函数,3.2.5 外部函数和内部函数,如果一个函数可以被其他源文件调用,该函数就称为外部函数。定义外部函数时,在函数前面加关键字extern 。 extern int add(int a,int b) return a+b; ,3.2.5 外部函数和内部函数,如果一个函数只能被本文件中的其他函数调用,该函数就称为内部函数。定义内部函数时,在函数前面加关键字static。 static int add(int a,int b) return a+b; ,3.2.6 函数的递归,所谓递归,就是函数自己调用自己,或

7、在自己调用的下一级函数中调用自己。函数的递归之所以能实现,就是因为函数在每次调用时都在栈中有形参和局部变量的拷贝,他们与函数的其他调用过程无关。 采用递归的方法解决实际问题时,必须满足一定的条件: 可以把要解决的问题转化为一个新的问题,而新问题的解决方法与原问题相同,只是所处理的对象有规律地递增或递减; 要有递归结束的条件,即在适当的地方结束递归调用,否则将进入死循环。,3.2.7 函数指针,函数指针变量的定义格式为: 函数的返回值类型 (*函数指针变量名)(函数的形式参数) void (*p)(int x);,3.3 结构体、共用体和枚举,前面介绍的数据类型(如字符型、整型、数组和指针等)只

8、能描述事物某一方面的属性。而现实世界中的事物往往具有多方面的属性,为此C语言提供几种用户可以自定义的数据类型:结构体、共用体和枚举。,3.3.1 结构体,结构类型体的定义 struct 结构体名 数据类型符 成员1; 数据类型符 成员2; 数据类型符 成员n; ;,3.3.1 结构体,结构体变量的定义 先定义结构体,然后像定义基本数据类型变量一样,定义结构体类型的变量 在定义结构体的同时定义结构体变量,适用于定义局部使用的结构体变量 直接定义结构体变量,即在定义结构体的同时定义结构体变量,但不给出结构体名,3.3.1 结构体,结构体变量的初始化 struct 结构体名 结构体变量名 = 初始数

9、据表; struct student a = 23, Zhang Xing, M, 28, 1002 Xin Jian Road ;,3.3.1 结构体,指向结构体的指针 struct 结构体名 *结构体指针名 struct student *p;,3.3.1 结构体,结构体变量成员的引用 结构体变量名.成员名a.id (*结构体指针变量).成员名(*p).id 结构体指针变量-成员名 p-id,3.3.1 结构体,嵌套结构体 struct student int id; char name20; char sex; unsigned int age; struct addr address;

10、 ; 结构体变量名.嵌套结构体变量名.结构体成员名 student.address.zipcode,struct address char city32; char address100; unsigned long zipcode; char tel8; ;,3.3.1 结构体,应用实例,3.3.2 共用体,共用体又称为联合体,它也是由不同类型的数据构成的。共用体和结构体的主要区别是:共用体存储时采用了覆盖技术,不同数据类型的成员占用同一段内存空间。这样在某一时间点上,共用体中只能存储其某一成员的信息。,3.3.2 共用体,共用体类型的定义 union 共用体名 数据类型符 成员1; 数据类型符 成员2; 数据类型符 成员n; ; 共用体变量的定义 union 共用体名 共用体变量名;,3.3.3 枚举,枚举是一个被命名的整型常量的集合,其中列举出所有可能的取值。 枚举类型的定义 enum 枚举名 枚举常量1, 枚举常量2, , 枚举常量n ; 枚举变量的定义 enum枚举名 枚举变量名;,3.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论