C程序语言课件:第9章 指针_第1页
C程序语言课件:第9章 指针_第2页
C程序语言课件:第9章 指针_第3页
C程序语言课件:第9章 指针_第4页
C程序语言课件:第9章 指针_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-4-182/462022-4-183/46void Swap(int x,int y) int temp; temp = x; x = y; y = temp;int main() int a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); return 0;程序程序 1:简单变量作函数参数:简单变量作函数参数void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp;int main() int a, b; a = 5; b = 9; Swap( &a

2、mp;a, &b ); printf( a=%d,b=%d ,a,b); return 0;程序程序 2:指针变量作函数参数:指针变量作函数参数 指针指针为函数为函数提供修改变提供修改变量值的手段量值的手段 2022-4-184/46变量的地址变量的地址变量名变量名内存:计算机内的存储部件内存:计算机内的存储部件所有指令和数据都保存在内存里所有指令和数据都保存在内存里速度快,可随机访问,但掉电即失速度快,可随机访问,但掉电即失编译或函数调用时为变量分配内存单元编译或函数调用时为变量分配内存单元0000ContentsContentsContentsContentsContentsCon

3、tentsContents变量的值变量的值某存储区域2022-4-185/46变量的地址变量的地址内存中的每个字节都有唯一的编号(地址)内存中的每个字节都有唯一的编号(地址)地址是一个十六进制无符号整数地址是一个十六进制无符号整数其字长一般与主机相同其字长一般与主机相同地址按字节编号,按类型分配空间地址按字节编号,按类型分配空间0000ContentsContentsContentsContentsContentsContentsContents某存储区域Address Operator2022-4-186/46如何读写内存中的数据?如何读写内存中的数据?0000ContentsContent

4、sContentsContentsContentsContentsContents某存储区域只要指明要访问的变量的内存单元地址只要指明要访问的变量的内存单元地址就可以立即访问到变量所在的存储单元就可以立即访问到变量所在的存储单元scanf(%d, &a);2022-4-187/46表示输出变量表示输出变量a的地址值?的地址值?2022-4-188/46如何读写内存中的数据?如何读写内存中的数据?0000ContentsContentsContentsContentsContentsContentsContents某存储区域直接寻址:按变量地址存取变量值直接寻址:按变量地址存取变量值sc

5、anf(%d, &a);2022-4-189/46如何读写内存中的数据?如何读写内存中的数据?0000ContentsContentsContentsContentsContentsContents0 x0037b000某存储区域间接寻址:通过存放变量地址的变量去访问变量间接寻址:通过存放变量地址的变量去访问变量2022-4-1810/46i的值被当作地址。如的值被当作地址。如i=100,则输入的整数就会从地址则输入的整数就会从地址100开开始写入内存始写入内存输入以输入以int的二进制形式写到的二进制形式写到c所所在的内存空间。在的内存空间。c所占内存不足以放下一个所占内存不足以放下

6、一个int,其后的空间也被覆盖其后的空间也被覆盖2022-4-1811/46 指针变量指针变量 指向指向 变量变量变量的地址(指针)变量的地址(指针)变量值变量值变量地址存入变量地址存入指针变量指针变量2022-4-1812/46定义了指针变量定义了指针变量pa,但,但pa并未指向并未指向a?如果指针指向一个非你控制的内存空间如果指针指向一个非你控制的内存空间并对该空间进行访问,将可能造成危险并对该空间进行访问,将可能造成危险2022-4-1813/46指针变量使用之前必须初始化指针变量使用之前必须初始化Never use uninitialized pointers2022-4-1814/4

7、62022-4-1815/46Pointers have names, types and values2022-4-1816/46指针变量指向的数据类型称为基类型指针变量指向的数据类型称为基类型指针变量只能指向同一基类型的变量指针变量只能指向同一基类型的变量2022-4-1817/46不能写成:不能写成:int *pa, pb;2022-4-1818/46 0 &a2022-4-1819/46 0 &a引用指针所指向的变量的值引用指针所指向的变量的值称为指针的解引用称为指针的解引用(Pointer Dereference)2022-4-1820/462022-4-1821/4

8、6传变量的值传变量的值形参值的改变形参值的改变不会影响对应的实参不会影响对应的实参2022-4-1822/46传变量地址传变量地址2022-4-1823/46指针变量作函数参数指针变量作函数参数可以修改实参的值可以修改实参的值2022-4-1824/46return仅限于仅限于从函数返回一个值从函数返回一个值2022-4-1825/46void Swap(int *x,int *y) int temp; temp = *x; *x = *y; *y = temp;int main() int a, b; a = 5; b = 9; Swap( &a, &b ); printf(

9、 a=%d,b=%d ,a,b); return 0; void Swap(int x,int y) int temp; temp = x; x = y; y = temp;int main() int a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); return 0;程序程序 1程序程序 2 主调函数主调函数被调被调函数函数实实 参参形形 参参2022-4-1826/46main() a, b; a = 5; b = 9; Swap(a, b); printf( a=%d,b=%d ,a,b); 0;55ab实实 参参形形 参

10、参99xyabxy55temp9x 和和 y是内部变量是内部变量单向值传递单向值传递主调函数主调函数被调函数被调函数2022-4-1827/46main() a, b; a = 5; b = 9; Swap( &a, &b ); printf( a=%d,b=%d ,a,b); 0;&a&a实实 参参形形 参参&b&bxyabxy5temp5ab995*x*y交换的是交换的是x 和和 y指向的单元内容指向的单元内容主调函数主调函数被调函数被调函数2022-4-1828/46指针指针pTemp未初始化未初始化指针指针pTemp指向哪里未知指向哪里未

11、知对未知单元写操作是危险的对未知单元写操作是危险的永远要清楚:永远要清楚:每个指针指向了哪里每个指针指向了哪里指针指向的内容是什么指针指向的内容是什么 2022-4-1829/46指针指针pTemp被赋了值被赋了值但交换的是地址值但交换的是地址值不是指针指向单元的内容不是指针指向单元的内容2022-4-1830/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号2022-4-1831/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号2022-4-1832/46【例【例9.79.7】计算并输出最高分及相应学生的学号】计算并输出最高分及相应学生的学号真正的原因:普通变量作函数参数按值调用真正的原因:

温馨提示

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

评论

0/150

提交评论