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

济南大学:《C语言程序设计》课程教学资源(PPT课件)第十章 指针(袁宁)

资源类别:文库,文档格式:PPT,文档页数:32,文件大小:537.5KB,团购合买
10.1 地址和指针的概念 10.2 变量的指针和指向变量的指针变量 10.3 数组的指针和指向数组的指针变量 10.4 字符串的指针和指向字符串的指针变量 10.5 函数的指针和指向函数的指针 10.6 返回指针值的函数
点击下载完整版文档(PPT)

第十章指针 ■10.1地址和指针的概念 10.2变量的指针和指向变量的指针变量 10.3数组的指针和指向数组的指针变量 ■10.4字符串的指针和指向字符串的指针变量 10.5函数的指针和指向函数的指针 10.6返回指针值的函数

第十章 指针 ◼ 10.1 地址和指针的概念 ◼ 10.2 变量的指针和指向变量的指针变量 ◼ 10.3 数组的指针和指向数组的指针变量 ◼ 10.4 字符串的指针和指向字符串的指针变量 ◼ 10.5 函数的指针和指向函数的指针 ◼ 10.6 返回指针值的函数

101地址和指针的概念 地址与指针 1.地址与取地址运算 C程序中的变量在内存中占有一个可标识的存储区, 每一个存储区是由若干个字节组成,每一个字节都有 自己的地址,而一个存储区的地址是指该存储区中 第一个字节的地址 C语言允许在程序中使用变量的地址 (通过地址运算符&可得到) 如: float x; 变量x的地址--&x inta[101;数组变量a的地址---数组名a

10.1 地址和指针的概念 一. 地址与指针 1. 地址与取地址运算 C程序中的变量在内存中占有一个可标识的存储区, 每一个存储区是由若干个字节组成, 每一个字节都有 自己的地址, 而一个存储区的地址是指该存储区中 第一个字节的地址 C语言允许在程序中使用变量的地址 ( 通过地址运算符&可得到) 如: float x ; 变量 x 的地址 ---- &x int a[10] ; 数组变量 a 的地址 ---- 数组名 a

2.指针与指针变量 (1)变量的访问方式 ①直接访问:通过变量名或地址访问变量的存储区 例: scanf (“%d”,&x); x-sqrt(x); printf(“%d”,x); ②间接访问:将一个变量的地址存放在另一个变量中 如将变量x的地址存放在2012 1010 变量p中,访间x时先找到p,1010 再由p中存放的地址找到x X (2)指针:一个变量的指针就是该变量的地址(指针就是地址) 如变量x的指针为1010。 (3)指针变量:存放某个变量的地址的变量,它用来指向另 个变量。如p就是存放变量x的地址的指针变量

2. 指针与指针变量 (1) 变量的访问方式 ① 直接访问 : 通过变量名或地址访问变量的存储区 例 : scanf ( “%d” , &x ) ; x = sqrt(x) ; printf ( “%d” , x ) ; ② 间接访问 : 将一个变量的地址存放在另一个变量中 如将变量 x 的地址存放在 变量p 中, 访问x 时先找到p, 再由p 中存放的地址找到x p x 2012 1010 1010 (2) 指针: 一个变量的指针就是该变量的地址(指针就是地址) 如变量x的指针为1010。 (3) 指针变量: 存放某个变量的地址的变量, 它用来指向另一 个变量。如p就是存放变量x的地址的指针变量

102变量的指针和指向变量的指针变量 、指针变量的定义 1.格式:数据类型*指针变量名; 例int“p har *p2 i 2.说明: (1)在变量定义时,号表示该变量是指针变量 (注意:指针变量是p1,p2,不是*p1,*p2) (2)定义指针变量后,系统为其分配存储空间,用以存放 其他变量的地址,但在对指针变量赋值前,它并没有 确定的值,也不指向一个确定的变量 例:intx,*p; 2012 1010 1234 5 注:指针变量p的值是随机值, 此时p和x并无关联

10.2 变量的指针和指向变量的指针变量 一、 指针变量的定义 1. 格式 : 数据类型 * 指针变量名; 例 int *p1 ; char *p2 ; 2. 说明 : (1) 在变量定义时, * 号表示该变量是指针变量 ( 注意: 指针变量是p1 , p2 , 不是*p1 , *p2 ) (2) 定义指针变量后, 系统为其分配存储空间, 用以存放 其他变量的地址, 但在对指针变量赋值前, 它并没有 确定的值, 也不指向一个确定的变量 例: int x , *p ; x = 5 ; p x 2012 1010 1234 5 注: 指针变量p的值是随机值, 此时p 和 x 并无关联

(3)使指针变量指向一个确定的变量必须进行赋值 int x,*p 2012 1010 X=5; 1010 5 p=&x; 指针变量的引用 1.指针运算符 (1)p与*不同,p是指针变量,p的值是p所指向的变量的地址 p是p所指向的变量,p的值是p所指向的变量的值 p的值为5(p表示x),而p的值为1010 (2)引用指针变量时的*与定义指针变量时的*不同 定义变量时的*只是表示其后的变量p是指针变量 引用时*表示取指针变量p所指向的变量x的值

(3) 使指针变量指向一个确定的变量必须进行赋值 int x , *p ; x = 5 ; p = &x ; p x 2012 1010 1010 5 二、 指针变量的引用 1. 指针运算符* (1) p与*p不同, p是指针变量, p的值是p所指向的变量的地址 *p 是p 所指向的变量, *p的值是p所指向的变量的值 *p 的值为 5 (*p 表示 x) , 而p 的值为 1010 (2) 引用指针变量时的 * 与 定义指针变量时的* 不同 定义变量时的* 只是表示其后的变量p是指针变量; 引用时*表示取指针变量p所指向的变量x的值

2012 1010 1010 int a,p 让p指向a p=&a a scanf(“%d”,p printf c%dn”,p);等价于&a p 12 printf(“%dm”,),对a重新赋值 等价于a=12 与央 p=&a &p&(p)+&a*&a+*(&a)+卹p+a 由于&和*运算符优先级相等,所以按照从右到左的顺 序进行结合运算

int a , *p ; p = &a ; scanf ( “%d” , p ) ; printf (“%d\n” , *p ) ; *p = 12 ; printf (“%d\n” , *p ) ; p a 2012 1010 1010 125 让p指向a 对a 重新赋值 等价于 a=12 等价于&a 2. & 与* p = &a ; &*p → &(*p) → &a *&a → *(&a) → *p → a 由于&和*运算符优先级相等,所以按照从右到左的顺 序进行结合运算

3.*与++, 2012 1010 int a=2, b=5,c, d, * p 1014 3 (1)p=&a; (p)+;(等价于a++;) 5|b p的值为a的地址,*p的值为2 3c 语句执行之后p的值不变,*p的值为3 3 (2)c=*p++; 等价于c=*p;p++; 关于p++的说明:由于*和++ 运算符的优先级一样,遵从从 执行后c的值为3,p的值为5右到左的顺序,所以等价于 (p++)。由于++在p的后面, (3)d=*++p; 则先操作后加一,所以写成 p;p++; 等价于++p;d=p; 由于p的数据类型为int所以 执行后d的值为3,如p的值为3p+等价于pp+2。参看课本 P212第二自然段的说明

2 a b c d 5 3. *与 ++ , - - int a = 2 , b = 5 , c , d , *p ; p 的值为a 的地址, *p 的值为2 语句执行之后p 的值不变, *p 的值为 3 (2) c = *p++ ; 等价于 c = *p ; p++ ; 执行后 c 的值为 3 , *p 的值为 5 (3) d = *++p ; 等价于 ++p ; d = *p ; 执行后 d 的值为 3 , *p 的值为 3 p 2012 1010 1010 (1) p = &a ; (*p)++ ; ( 等价于 a++ ; ) 1012 3 3 1014 3 关于*p++的说明:由于*和++ 运算符的优先级一样,遵从从 右到左的顺序,所以等价于 *(p++)。由于++在p的后面, 则先操作后加一,所以写成 c = *p ; p++ ; 由于p 的数据类型为int所以 p++等价于p=p+2。参看课本 P212 第二自然段的说明

例10.2输入a和b两个整数,按先大后小的顺 序输出a和b。 pl&b 5|a include void main( i int *pI, p2, *p, a, b 2&a scanf( %d%d", &a, &b); pl=&a: p2=&b; p&a if(a<b) ip=pI 输出结果 pI=p2; a=5,b=9 2 max=9, min=5 printf(“a=%d,b=%dmn”,a,b) printf(max=%d, min=%d n", pl, p2); 本程序的目的是:实现在指针变量p1中存放值较大的 变量的地址;p2中存放值较小的变量的地址

例10. 2输入a和b两个整数,按先大后小的顺 序输出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(“a=%d, b=%d \n”, a , b); printf(“max=%d, min=%d \n”,*p1 ,*p2) ; } a b p1 p2 p &a &b &b &a &a 5 9 输出结果: a=5 , b=9 max=9 , min=5 本程序的目的是:实现在指针变量p1中存放值较大的 变量的地址;p2中存放值较小的变量的地址

三、指针变量作函数参数 main 例:2个数按大小顺序输出 (整型变量做参数) a 5 #include void swap( int x, int y 9 int temp; emp=x, y= temp; void main( 说明:该程序不能实现a和b f int a, bi 的交换因为实参a,b对形参 scanf(%d %d', &a, &b) if(a<b) swap(a, b); y是“值传递”,x和y的 化不影响a和b →rint(“a=%d,b=%dlmn”,a,b); 所以输出为:a=5,b=9

三、 指针变量作函数参数 例: 2个数按大小顺序输出 (整型变量做参数) #include void swap( int x , int y) { int temp; temp = x ; x = y; y = temp; } void main( ) { int a , b ; scanf(“%d%d”,&a, &b); if (a<b) swap(a , b); printf(“a=%d, b=%d\n”, a, b); } a b x y 5 temp 说明: 该程序不能实现a 和b 的交换因为实参a , b 对形参 x , y 是“值传递”, x 和y 的 变 化不影响a 和b 所以输出为: a=5, b=9 9 main swap 5 5 9 9 5

例10.3① main (指针变量做参数) #include ptl &a void swap(int *pl, int *p2) f int temp; a 9 temp=*pl; pI=*p2; p2=temp;交换的是指针变P&b 量指向的变量的值* void main( b5 int a,b,*ptl, * pt2 说明:这种方法是交换p1和 scan fe90d%0d7,&a,&b);p2所指向的变量的值.,即 ptl=&a; pt2=&b: 交换main函数中a和b的值 if (a<b) swap(ptl, pt2); 所以输出为:a=9,b=5 printf(“a=%d,b=%dⅦn”,a,b)

例 10. 3 ① (指针变量做参数) #include void swap1(int *p1 , int *p2) { int temp; temp = *p1 ; *p1 = *p2; *p2 = temp;/*交换的是指针变 量指向的变量的值*/ } void main( ) { int a , b , *pt1 , *pt2 ; scanf(“%d%d”,&a , &b); pt1 = &a ; pt2 = &b ; if (a<b) swap1( pt1 , pt2) ; printf(“a=%d, b=%d\n”, a, b); } a b p1 p2 temp &b pt1 &a pt2 5 说明: 这种方法是交换p1和 p2所指向的变量的值, 即 交换main函数中a 和b的值 所以输出为: a=9, b=5 main swap1 5 9 &a &b 9 5

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

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

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