• / 64
  • 下载费用:10 金币  

C语言程序设计(指针)

关 键 词:
语言程序设计 指针
资源描述:
1 第第6章章 指针指针 C C语言程序设计课程组语言程序设计课程组 魏慧琴魏慧琴 指针和变量指针和变量 指针和数组指针和数组 指针和函数指针和函数 字符指针字符指针 案例学习案例学习 学习内容学习内容 第一单元第一单元 指针指针和指针变量和指针变量 地址和指针地址和指针 指针变量的定义指针变量的定义 指针变量的引用指针变量的引用 3 内存单元和地址内存单元和地址 运行程序时程序 数据都存在内部存储器运行程序时程序 数据都存在内部存储器 内部存储器有很多存储单元组成内部存储器有很多存储单元组成 每个存储单元有自己独有的地址 称每个存储单元有自己独有的地址 称内存地址内存地址 4 在程序中所定义的变量 编译系统会根据变量的类在程序中所定义的变量 编译系统会根据变量的类 型 分配不同长度的内存 型 分配不同长度的内存 当变量只占用一个字节 该字节的地址就是变量的地址当变量只占用一个字节 该字节的地址就是变量的地址 当变量只占用连续若干字节 第一个字节的地址就是变当变量只占用连续若干字节 第一个字节的地址就是变 量的地址量的地址 如 如 在在VC 中中 char ch 1个字节个字节 inta 4个字节个字节 float b 4个字节个字节 3 2000 2003 2008 2011 5 0 a b A 1000 ch 变量名变量名数据类型数据类型变量地址变量地址 ch字符型字符型1000 a整型整型2000 b单精度实型单精度实型2008 变量与地址变量与地址 5 直接访问方式直接访问方式 按变量的地址存取变量的值按变量的地址存取变量的值 访问变量的方式访问变量的方式 int a float b a 3 b 5 35 0 20002008 a b 将将3送入变量送入变量a所占据的内存所占据的内存单元 地址单元 地址2000 6 间接访问方式间接访问方式 按变量的地址的地址存取变量的值 按变量的地址的地址存取变量的值 35 20002008 定义变量定义变量p p 存放 存放a a的地址 通过的地址 通过p p访问访问a a int a float b a 3 b 5 2000 ab 3000 指针指针 指针变量是存放地址的变量指针变量是存放地址的变量 指针变量指针变量 访问变量的方式访问变量的方式 7 例如 用变量例如 用变量p p来来存放变量存放变量a a的地址的地址 char ps float pf1 pf2 11 指针变量的值为地址 可理解为无符号的整数 但指针变量的值为地址 可理解为无符号的整数 但不能直接将整型不能直接将整型 常量赋给指针变量常量赋给指针变量 用相同类型的指针变量赋值用相同类型的指针变量赋值 用变量的地址给指针变量赋值用变量的地址给指针变量赋值 求地址运算符求地址运算符 p 如 int a p1 p2 p1 p2 p1 如 p NULL 或或p 0 指针变量的定义指针变量的定义 12 危险 危险 如 int p1 NULL float a float p2 char ch p3 int a p float b a 3 b a p a 注 若不赋值 则指针变量注 若不赋值 则指针变量 的值是随机的的值是随机的 指针变量的初始化方法 指针变量的初始化方法 赋空值赋空值NULLNULL 用已定义的变量的地址用已定义的变量的地址 指针变量的定义指针变量的定义 13 示例示例 int a b int p1 p2 p1 p2 p1 p2 a b 指针变量的定义指针变量的定义 14 指针运算符 指针运算符 和取地址运算符 和取地址运算符 p就是变量就是变量a 指针变量的引用指针变量的引用 15 通过通过指针变量访问所指变量两步 指针变量访问所指变量两步 将指针变量指向被访问的变量将指针变量指向被访问的变量 指针变量指针变量 访问所指变量 访问所指变量 取内容 取内容 b pb p 如 printf d n p p 10 printf a d b d n p b 注意 注意 p p若出现在若出现在 的的右右边或其他表达式中则为边或其他表达式中则为取取 若若出现在出现在 的的左左边则为边则为存存 a 10 b 5 指针变量的引用指针变量的引用 16 include void main int a pi float f pf char st pc pi pf pc pi 10 pf 1 5 pc a printf d f c n a f st printf d f c n pi pf pc 单击鼠标 演示程序的 执行过程 例6 1 pi pf pc a f st int p p b p printf d n b p 4 printf d n a 等价于等价于pa 指针变量指针变量 非指针变量非指针变量 思考 下列表达式是何含义 有什么思考 下列表达式是何含义 有什么 要求 要求 int t printf d d n a b t a a b b t printf d d n a b include void main int a 3 b 6 int pa int t printf d d n a b t pa pa pb pb t printf d d n a b 指针变量的引用指针变量的引用 19 include include voidvoid main main intint a ba b p p p p1 1 p p2 2 a a 3 3 b b 6 6 p p1 1 p p2 2 p pp p1 1 p p1 1 p p2 2 p p2 2 p p printfprintf d d d d n p1 p2 n p1 p2 printfprintf d d d d n a bn a b 单击鼠标 演示程序的执 行过程 p1 p2 p a b a是数组首地址 是地址常量是数组首地址 是地址常量 a pa错误错误 25 for p a p a 10 p printf d p 例例1 1 数组元素的引用数组元素的引用 include void main int a 10 i for i 0 i 10 i a i i for i 0 i 10 i printf d a i a i int p for p a i 0 i 10 i p p i 引用数组元素的方法引用数组元素的方法 26 练习 数组的使用 练习 数组的使用 include void main int i a 5 p a printf Input 5 numbers n for i 0 i 5 i scanf d printf Output these numbers n for i 0 i p2的结果的结果为为0 真 真 p2 a的结果为的结果为1 真 真 指向一维数组指向一维数组指针变量的计算指针变量的计算 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 p1 p2 34 include int main void int i a 10 p long sum 0 printf Enter 10 integers for i 0 i 10 i scanf d for p a p a 9 p sum sum p printf sum ld n sum return 0 例例2 2 使用指针计算数组元素之和使用指针计算数组元素之和 Enter 10 integers 10 9 8 7 6 5 4 3 2 1 sum 55 p3000 a 0 地址内容数组元素 3002 a 1 3018 a 9 a i a a 1 a 9 a i p p p 35 第三单元第三单元 指针与函数指针与函数 指针作为函数参数指针作为函数参数 36 函数返回指针函数返回指针 函数指针函数指针 37 指针作为函数参数指针作为函数参数 简单变量作函数的参数简单变量作函数的参数 在函数调用时是按在函数调用时是按 值传送值传送 方式传递参数的方式传递参数的 单向传递单向传递 指针变量存放的是指针变量存放的是 地址地址 作函数的参数作函数的参数 在函数调在函数调 用时按用时按 值传送值传送 方式传递参数方式传递参数 双向传递双向传递 即 即 通过通过 传值传值 完成完成 地址地址 的传递的传递 例例1 编写编写一个函数实现两个数的交换一个函数实现两个数的交换 include void swap int x int y int t t x x y y t void main int a 3 b 5 swap a b printf d d n a b 3 5 a b x y 4012 4610 3 5 5 3 38 指针作为函数参数指针作为函数参数 39 程序变化 include void swap int x int y int t t x x y y t void main int a 3 b 5 swap printf d d n a b 3 5 a b 2A02 2C16 x y 4012 4610 2A02 2C16 3 5 指针作为函数参数指针作为函数参数 40 程序变化 include void swap int x int y int t t x x y y t void main int a 3 b 5 swap printf d d n a b int t t x x y y t 2A02 2C16 4012 4610 5 3 a b 2A02 x y 2C16 2A02 2C16 指针作为函数参数指针作为函数参数 41 程序变化 include void swap int x int y int t t x x y y t void main int a 3 b 5 swap printf d d n a b int t t x x y y t t是是不确定的值 用不确定的值 用 t可能可能破破 坏系统的正常工作状态 坏系统的正常工作状态 t 42 示例示例 输出两数中的大者输出两数中的大者 include void max int p1 int p2 int t t p1 p1 p2 p2 t void main int a b int pa pb printf 输入输入a 和和 b n scanf d d pa pb if a b max pa pb printf max d n a 指针作为函数参数指针作为函数参数 43 练习练习1 1 阅读源程序 写出运行结果阅读源程序 写出运行结果 include void sub int x int y int z z y x void main int a b c sub 9 5 sub 3 a sub a b printf d d d n a b c 注意注意 指向指向变量的指针变量做变量的指针变量做 参数 如何进行参数的参数 如何进行参数的传递 传递 4 7 3 指针作为函数参数指针作为函数参数 44 函数返回指针函数返回指针 函数的返回值可以是整型的函数的返回值可以是整型的 实型的实型的 也可以返回指针也可以返回指针 与一般函数的定义不同之处是 在函数名的前面加了一个与一般函数的定义不同之处是 在函数名的前面加了一个 号号 这就是能够返回指针的函数这就是能够返回指针的函数 45 定义形式定义形式 类型说明符类型说明符 函数名函数名 参数说明参数说明 函数体函数体 示例示例 int search int x int n int p p x n return p 函数的返回值为指向整型的指针 函数的返回值为指向整型的指针 函数返回指针函数返回指针 46 例例 用返回指针的函数来实现输出两个数中的最大值 用返回指针的函数来实现输出两个数中的最大值 include int max int p1 int p2 int r if p1 p2 r p1 else r p2 return r void main int a b p printf 输入输入a 和和 b n scanf d d p max printf max d p 函数返回指针函数返回指针 47 一个函数在内存中占一片存储一个函数在内存中占一片存储 空间空间 在函数被编译时 被分配 在函数被编译时 被分配 给一个入口地址 这个给一个入口地址 这个入口地址入口地址就就 称为称为函数的指针函数的指针 用一个指针变量指向函数 然用一个指针变量指向函数 然 后用后用指向函数的指针变量代替指向函数的指针变量代替函数函数 名名来调用这个函数来调用这个函数 函数指针函数指针 void swap void main swap入口地址入口地址 main入口地址入口地址 48 函数指针定义形式 函数指针定义形式 类型说明符类型说明符 变量名变量名 例如例如 intint p p 定义了一个指向函数的指针变量定义了一个指向函数的指针变量p p 函数的返回值是整型 函数的返回值是整型 函数的调用形式函数的调用形式 指针变量 实参表列指针变量 实参表列 例如例如 p p a ba b 注意 与与 int p int p 的区别的区别 函数指针函数指针 49 include int max int x int y int z z x y x y return z void main int p int int a b m p max 为函数指针赋初值为函数指针赋初值 scanf d d m p a b a ba b做实参 调用做实参 调用maxmax函数函数 printf na d b d max d n a b m m p a b m max a b 例例1 1求求a ba b中的最大者中的最大者 函数指针函数指针 第四单元第四单元 字符指针字符指针 字符串的表示形式字符串的表示形式 字符数组与字符指针的区别字符数组与字符指针的区别 字符指针应用举例字符指针应用举例 50 用字符数组实现用字符数组实现 如如 staticstatic charchars s VC VC 6 6 0 0 用字符指针实现用字符指针实现 如 如 char char psps VC 6 0 VC 6 0 或或char char psps psps VC 6 0 VC 6 0 字符串的表示形式字符串的表示形式 sps Vs 0 V Cs 1 C s 2 s 3 6s 4 6 s 5 0s 6 0 0s 7 0 51 1 1 字符字符数组可以存字符串 存的是字符 而字数组可以存字符串 存的是字符 而字 符串指针变量存的是字符串在内存的首地址 符串指针变量存的是字符串在内存的首地址 2 2 赋值赋值方式不同 前者一次只赋一个字符 方式不同 前者一次只赋一个字符 要赋若干次 后者只赋值一次 赋的是要赋若干次 后者只赋值一次 赋的是地址地址 I love this game 0 变量p 数组a 300A 300A 如 char a Hello char b p Hello b Hello 如 char p abcd putchar p 3 3 3 可以可以象数组那样用下标形式引用指针变量所象数组那样用下标形式引用指针变量所 指字符串中的指字符串中的字符 字符 字符数组与字符指针的区别字符数组与字符指针的区别 52 如果要改变数组所代表的字符如果要改变数组所代表的字符 串 只能改变数组元素的内容串 只能改变数组元素的内容 如果要改变指针所代表的字符如果要改变指针所代表的字符 串 通常直接改变指针的值 让串 通常直接改变指针的值 让 它指向新的字符串它指向新的字符串 53 char sa This is a string char sp This is a string strcpy sa Hello sp Hello sa Hello 非法非法 数组名是常量 不能对它赋值数组名是常量 不能对它赋值 字符数组与字符指针的区别字符数组与字符指针的区别 定义字符指针后 如果没有对它赋值 指针的值定义字符指针后 如果没有对它赋值 指针的值不确定不确定 char s scanf s s char s str 20 s str scanf s s 定义指针时 先将它的初值置为空 char s NULL 不要引用未赋值的指针不要引用未赋值的指针 字符指针应用字符指针应用 例例1 1 用指向字符串的指针变量实现字符串的输出用指向字符串的指针变量实现字符串的输出 include include voidvoid main main charchar s VC s VC 6 6 0 0 p p p p s s printfprintf s s n sn s printfprintf s s n pn p 字符指针应用举例字符指针应用举例 55 include void main char s1 VC 6 0 s1 2 printf s n s1 例例2 2输出输出字符串中的部分数据字符串中的部分数据 运行运行结果结果 6 0 56 将s1定义为字符数组是否还可 以进行这样的操作 字符指针应用举例字符指针应用举例 include void main char a 20 b 20 p1 p2 gets a p1 a p2 b for p1 0 p1 p2 p2 p1 p2 0 printf string a is s n a printf string b is s n b 例例3 3 将将字符串字符串a a复制到字符串复制到字符串b b a 0 b 0 0 a 0 P1P2 0 P1P2 P1 P2 strcpy p2 p1 57 字符指针应用举例字符指针应用举例 define MAXLINE 100 void encrypt char s int main void char line MAXLINE printf Input the string gets line encrypt line printf After being encrypted s n line return 0 例例4 4 加密问题 加密问题 为了防止信息泄密 将电码明文通过加密方式变换成为为了防止信息泄密 将电码明文通过加密方式变换成为 密文 如将小写字母密文 如将小写字母a a变成变成b zb z变成变成a a 其他字符不变 其他字符不变 字符指针应用举例字符指针应用举例 58 加密函数的两种实现加密函数的两种实现 void encrypt char s int i for i 0 s i 0 i if s i z s i a else s i s i 1 void encrypt char s for s 0 s if s z s a else s s 1 Input the string he will come in 2 days After being encrypted if xjmm dpnf jo 2 ebzt 字符指针应用举例字符指针应用举例 59 60 函数的函数的入口地址入口地址就称为就称为函数的指针函数的指针 用一个指针变量指向函数 然后用用一个指针变量指向函数 然后用指向函数的指针变量代指向函数的指针变量代 替替函数名函数名来调用这个函数来调用这个函数 函数指针定义形式 函数指针定义形式 类型说明符类型说明符 变量名变量名 函数的调用形式函数的调用形式 指针变量 实参表列指针变量 实参表列 第五单元第五单元 案例学习案例学习 案例学习 指向函数的指针案例学习 指向函数的指针 例例1 1 设设一个函数一个函数processprocess 在调用它的时候 每次实在调用它的时候 每次实 现不同的功能现不同的功能 1 1 求求a a和和b b之之和和 2 2 指指a a b b中大中大者者 3 3 求求a a b b中小中小者者 int add int x int y int z z x y return z 函数指针函数指针 61 int min int x int y int z if xy z x else z y return z 函数指针函数指针 62 include void main int a b printf please input a and b n scanf d d printf sum process a b add printf max process a b max printf min process a b min void process int x int y int fun int int int result result fun x y printf d n result 函数指针函数指针 63 64 说明说明 用指向函数的指针作函数参数的优越性在于能在调用用指向函数的指针作函数参数的优越性在于能在调用 一个函数过程中执行所指定的函数 从而增加处理问题的一个函数过程中执行所指定的函数 从而增加处理问题的 灵活性 灵活性 在处理不同函数时 在处理不同函数时 process函数本身并未改变 而只函数本身并未改变 而只 是改变了调用它的是改变了调用它的实参实参 如果将另一个函数传给 如果将另一个函数传给process 只需改变一个实参值即可 只需改变一个实参值即可
展开阅读全文
  麦档网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:C语言程序设计(指针)
链接地址:https://www.maidoc.com/p-16761837.html

当前资源信息

陈森强

编号: 20200626154731317121

类型: 共享资源

格式: PDF

大小: 1.16MB

上传时间: 2020-06-26

关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

[email protected] 2018-2020 maidoc.com版权所有  文库上传用户QQ群:3303921 

麦档网为“文档C2C模式”,即用户上传的文档所得金币直接给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的金币归上传人(含作者)所有。
备案号:蜀ICP备17040478号-3  
川公网安备:51019002001290号 

本站提供办公文档学习资料考试资料文档下载


收起
展开