当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

《高级语言程序设计 Advanced Programming》课程教学资源(PPT课件讲稿)第8章 指针

资源类别:文库,文档格式:PPT,文档页数:67,文件大小:2.05MB,团购合买
地址和指针的概念 变量的指针和指向变量的指针变量 数组与指针 字符串与指针 指向函数的指针 返回指针值的函数 指针数组和指向指针的指针 有关指针的数组类型和指针运算的小结
点击下载完整版文档(PPT)

第8章指针 Advanced programming

Advanced Programming 第8章 指针

主要内容 地址和指针的概念 变量的指针和指向变量的指针变量 数组与指针 字符串与指钋 指向函数的指针 ◆返回指针值的函数 指针数组和指向指针的指针 有关指针的数组类型和指针远算的小结 Advanced programming

Advanced Programming 主要内容 地址和指针的概念 变量的指针和指向变量的指针变量 数组与指针 字符串与指针 指向函数的指针 返回指针值的函数 指针数组和指向指针的指针 有关指针的数组类型和指针运算的小结

本章学习目标: ◆认识到用地址作为一种数据类型的重要性。 ◇理解指针包括地址和类型两种属性。 ◇掌握指针运算符&和* ◆能够通过地址引用调用在被调函数与主调 函数之间共享数据。 ◆理解指针和数组的关系。 ◆理解指向函数的指针的用法。 Advanced programming

Advanced Programming 本章学习目标: ❖认识到用地址作为一种数据类型的重要性。 ❖理解指针包括地址和类型两种属性。 ❖掌握指针运算符&和* 。 ❖能够通过地址引用调用在被调函数与主调 函数之间共享数据。 ❖理解指针和数组的关系。 ❖理解指向函数的指针的用法

8.1地址和指针的概念 内存用户数据区 2000 变量 2002 6 变量j 3010 2000 1 pointer 指针:一个变量的地址。 指针变量:存放某一变量的地址(即指针)。 Advanced programming

Advanced Programming 8.1 地址和指针的概念 内存用户数据区 变量 i 变量 j 变量 i_pointer 3 6 2000 2000 2002 3010 指针:一个变量的地址。 指针变量:存放某一变量的地址(即指针)

8.2变量的指针和指向变量的指针变量 ◆定义一个指针变量 ◆定义的一般形式:基类型*指针变量名; 基类型:用来指定指针变量可以指向的变量的类型 将决定指针移动和运算时的移动量。 ●*:表示该变量为指针类型 例 int*pI,p2; float *q static char“name; 注意: 1、int*pl,*p2;与int*p1,p2: 2、指针变量名是p1,p2不是*p1p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值 Advanced programming

Advanced Programming 8.2 变量的指针和指向变量的指针变量 ◆定义一个指针变量 ❖定义的一般形式:基类型 *指针变量名; ⚫基类型:用来指定指针变量可以指向的变量的类型。 将决定指针移动和运算时的移动量。 ⚫* :表示该变量为指针类型 例 int *p1,*p2; float *q ; static char *name; 注意: 1、int *p1, *p2; 与 int *p1, p2; 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值

★&与运算符: 取地址运算符 指针运算符(“间接访问”运算符) 含义:取变量的地址含义取指针所指向变量的内容 2000 整型变量i 1 pointer I pointer 2001 10 2002 &i_pointer 2000 10 2003 2004 ←一变量 i pointer 200 2000 指针变量 2006 pointer---指针变量,它的内容是地址量 1 pointer--指针的目标变量,它的内容是数据 & c1 pointer-指针变量占用内存的地址

Advanced Programming &与*运算符: 取地址运算符 含义: 取变量的地址 指针运算符(“间接访问”运算符) 含义: 取指针所指向变量的内容 …... …... 2000 2004 2006 2005 整型变量i 10 变量i_pointer 2001 2002 2003 2000 指针变量 i_pointer-----指针变量,它的内容是地址量 *i_pointer----指针的目标变量,它的内容是数据 &i_pointer---指针变量占用内存的地址 2000 10 i_pointer *i_pointer &i_pointer i

◆指针变量的初始化 一般形式:存储类型]数据类型指针名-初始地址值 int i. 赋给指针变量 int“p=&i: 不是赋给目标变量 例i 指针变量赋值 例int“t&*p=&i; int i,j; int i; int *g-p, nt *pl, * p2 1=&i;p2=& 用已初始3pl= j=6;*p2=8; Advanced programming

Advanced Programming ◆指针变量的初始化 一般形式:[存储类型] 数据类型 *指针名=初始地址值; 赋给指针变量, 不是赋给目标变量 例 int i; int *p=&i; 变量必须已说明过 类型应一致 例 int *p=&i; int i; 例 int i; int *p=&i; int *q=p; 用已初始化指针变量作初值 指针变量赋值: int i, j; int *p1, *p2; p1=&i; p2=&j ; i=3; *p1=5; j=6; *p2=8;

◆指针变量的引用 例81通过指针变量访问整型变量 #include 运行结果: a=100,b=10 void main() pl=100,*p2=10 inta,b,“pl,*p2; &affd &b=ffd a=100;b=10: pI=ffd4, p2=ffd pl=&a; p2=&b: &pl=ffds, &p2=ffda printf(“a=%d,b=%dn”,;a,b) printf(* pl=%d, *p2=d\n", *pl, *p2); ffd r 100a printf(“&a=%x,&b=%X\n”’,&a,&b); ffd 10b printf(“pl=%X,p2=%X\n”,pl,p2); ffds ffd pl printf("&p1=%x,&p2=%xIn", &pl,& p2); ffda ffd p2 Advanced programming

Advanced Programming ◆指针变量的引用 例8.1 通过指针变量访问整型变量 #include void main( ) {int a, b, *p1, *p2 ; a=100; b=10; p1=&a; p2=&b; printf(“a=%d, b=%d\ n”,a, b); printf(“* p1=%d, * p2=%d\ n”, *p1, * p2); printf(“&a=%x,& b=%x\ n”,&a, &b); printf(“p1=%x, p2=%x\ n”, p1, p2); printf(“& p1=%x, &p2=%x\ n”, &p1, & p2); } 运行结果: a=100, b=10 *p1=100, *p2=10 &a=ffd4, &b=ffd6 p1=ffd4, p2=ffd6 &p1=ffd8, &p2=ffda 100 10 ffd4 ffd6 a b p1 p2 ffd4 ffd6 ffd8 ffda

关于&和*运算符的进一步说明: 、&:优先级同为2级,结合性:从右向左。 1若已执行:inta,b,*p1,*p2: pl=&a;p2=&b;a=100;b=10; 则①&*p14>&a(p1) &*p24>&b(p2) ②p2=&pl>p2=&a 2.&am先进行&a得的地址,再对的地址进行*运算 3记单冷+:忧完级为2,结合怪从右到在1001 (p12→>a++b 2 p十一什0 &a 10 意即 pl原指向,现在指向下一个地址了 Advanced programming

Advanced Programming 关于 & 和 * 运算符的进一步说明: * 、&:优先级同为2级, 结合性:从右向左。 1.若已执行: int a, b, * p1, * p2; p1=&a; p2=&b; a=100; b=10; 则 ① &* p1  &a (p1) &* p2  &b (p2) ②p2=&* p1  p2=&a &a &b p1 p2 10 100 b a &a &a p2 p1 10 100 b a 2. * & a:先进行&a得a的地址,再对a的地址进行* 运算 即指向a地址所指向的变量,就是a ,其值是100 3. 运算符 * ,++ :优先级为2, 结合性:从右到左 (* p1)++ → a++ * p1++ → * (p1++) 意即: p1原指向a , 现在指向下一个地址了

例8.2输入a和b两个整数,用指针方法按先大后小顺序输出 #include void main Rint *pl, "p2, *p, a, b scanf(%d%d”,&a,&b) 1=ca;p2=&b: if(a<b) kp=pl; pl=p2; p2 运行情况: printf("lna=%d, b=%dn", a, b); 5,9 printf(max=%d, min=%d\n",pl,*p 2);a-5, b-9 max=9. minEs 换前换后 ffdo ffd ffd p ffd2 ffds ffd p2 fd420 fidp 只交换了指针的值, ffd65 没有交换变量的值 5 a ffd 9 Advanced programming

Advanced Programming 例8.2 输入a和b两个整数,用指针方法按先大后小顺序输出 #include void main( ) {int *p1, *p2, *p, a, b; scanf(“%d%d”,&a,&b); p1=&a;p2=&b; if(a<b) {p=p1; p1=p2; p2=p; } printf(“\na=%d, b=%d\n”, a, b); printf(“max=%d, min=%d\ n”, *p1, *p2); } 运行情况: 5,9  a=5, b=9 max=9,min=5 只交换了指针的值, 没有交换变量的值 换前 换后 ffd8 ffd6 5 5 ffd0 ffd2 ffd4 ffd8 ffd6 ffd6 ffd8 20 ffd6 9 9 p1 p2 p a b

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共67页,可试读20页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有