[教育学]C语言谭浩强版第10章

上传人:油条 文档编号:49784083 上传时间:2018-08-02 格式:PPT 页数:94 大小:633.50KB
返回 下载 相关 举报
[教育学]C语言谭浩强版第10章_第1页
第1页 / 共94页
[教育学]C语言谭浩强版第10章_第2页
第2页 / 共94页
[教育学]C语言谭浩强版第10章_第3页
第3页 / 共94页
[教育学]C语言谭浩强版第10章_第4页
第4页 / 共94页
[教育学]C语言谭浩强版第10章_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《[教育学]C语言谭浩强版第10章》由会员分享,可在线阅读,更多相关《[教育学]C语言谭浩强版第10章(94页珍藏版)》请在金锄头文库上搜索。

1、C程序设计第10章 指 针10.1 地址和指针的概念 10.2 变量的指针和指向变量的指针变量 10.3 数组的指针和指向数组的指针变量 10.4 字符串的指针和指向字符串的指针变量 10.5 函数的指针和指向函数的指针变量 10.6 返回指针值的函数 10.7 指针数组和指向指针的指针 习题C程序设计10.1 10.1 地址和指针的概念地址和指针的概念 内存:内部存储器,由存储单元组成。存储单元是 线性连续的。存储单元的最小单位是字节。 计算机中对不同存储单元的区分:给每个存储单元 编号,根据编号找到相应的存储单元(即内存地址)。int i=10;char ch=A;float f1=3.1

2、4;200010 2002 2003A20063.14printf(”%f”,f1);C程序设计int i,j,k; printf(”%d”,i);scanf(“%d“, k=i+j;int *i_pointer; i_pointer=C程序设计C程序设计为了表示将数值3送到变量中,可以有两种表达方 法: (1) 将3送到变量i所标志的单元中。 (2) 将3送到变量i_pointer所“指向”的单元。 由于通过地址能找到所需的变量单元,我们可以说 ,地址“指向”该变量单元。因此在C语言中,将地 址形象化地称为“指针” 。 如果有一个变量专门用来存放另一变量的地址(即 指针),则它称为“指针变量

3、”。回第十章C程序设计10.2 变量的指针和指向变量的指针变量如前所述,变量的指针就是变量的地址。存放变量 地址的变量是指针变量,用来指向另一个变量。为 了表示指针变量和它所指向的变量之间的联系,在 程序中用“*”符号表示“指向”,例如,i_pointer代 表指针变量,而*i_pointer是i_pointer所指向的变 量。C程序设计*i_pointer也代表一个变量,它和变量i是同一回 事。下面两个语句作用相同: i=3; *i_pointer=3;int i,*i_pointer;i_pointer=C程序设计10.2.1 定义一个指针变量 C语言规定所有变量在使用前必须定义,指定其类

4、 型,并按此分配内存单元。指针变量不同于整型变 量和其他类型的变量,它是用来专门存放地址的。 必须将它定义为“指针类型”。 int i,j; int *pointer_1,*pointer_2; 定义指针变量的一般形式为: 基类型 *指针变量名C程序设计float *pointer_3; char *pointer_4; 指针变量指向另一个变量: pointer_1= pointer_2=将变量i的地址存放到指针变量pointer_1 中,因此 pointer_1 就“指向”了变量i。同样,pointer_2 就“指向”了变量j。C程序设计在定义指针变量时要注意两点: (1) 指针变量前面的“

5、*”,表示该变量的类型为指 针型变量。注意:指针变量名是pointer_1、 pointer_2,而不是*pointer_1、*pointer_2。 (2) 在定义指针变量时必须指定基类型。C程序设计指针变量中只能存放地址(指针),不要将一个整型 量(或任何其他非地址类型的数据)赋给一个指针变 量。下面的赋值是不合法的: pointer_1=100; 有两个有关的运算符: (1) int *pointer_1, *pointer_2;a=100;b=10;pointer_1= /*把变量a的地址赋给pointer_1*/pointer_2= printf(“%d,%dn“,a,b);print

6、f(“%d,%dn“,*pointer_1,*pointer_2);100,10 100,10C程序设计下面对“”语句,若有C程序设计C程序设计(2) *scanf(“%d,%d“,p1= p2=if(ab) p=p1;p1=p2;p2=p; printf(“na=%d,b=%dnn“,a,b);printf(“max=%d,min=%dn“,*p1,*p2); 5,9 a=5,b=9 max=9,min=5C程序设计交换前 交换后C程序设计10.2.3 指针变量作为函数参数函数的参数不仅可以是整型、实型、字符型等数 据,还可以是指针类型。它的作用是将一个变量 的地址传送到另一个函数中。例10

7、.3 对输入的两个整数按大小顺序输出。用函数处理,用指针类型的数据作函数参数。 程序如下:C程序设计swap(int *p1,int *p2) int temp;temp=*p1; *p1=*p2; *p2=temp; main() int a, b, *pointer_1, *pointer_2;scanf(“%d, %d“, pointer_1= pointer_2=if(ab) swap(pointer_1,pointer_2);printf(“n%d,%dn“,a,b); 5,9 9,5C程序设计p1p1C程序设计swap(int *p1,int *p2)int temp;*temp=

8、*p1; *p1=*p2;*p2=*temp; swap(int x,int y)int temp;temp=x;x=y;y=temp;通过函数调用得到n个要改变的值 209页C程序设计练习(1): void sub(int x,int y,int *z)*z=y-x;main() int a,b,c; sub(10,5, sub(7,a, sub(a,b, printf(“%d,%d,%dn”,a,b,c);-5,-12,-7C程序设计练习(2):void fun(char *a,char *b) a=b; (*a)+; main( ) char c1=A,c2=a,*p1,*p2;p1=p

9、2=fun(p1,p2);printf(”%c%cn”,c1,c2);c1Ac2aAbb回第十章C程序设计10.3 数组的指针和指向数组的指针变量指向数组元素的指针 int a10; int *p; /*定义p为指向整型变量的指针变量*/ p= p=a;int *p= int *p=a;C程序设计C程序设计l 通过指针引用数组元素 假设p已定义为指针变量,并已给它赋了一个地址 ,使它指向某一个数组元素。如果有以下赋值语句 : *p=1; C规定:如果指针变量p已指向数组中的一个元素 ,则p+1指向同一数组中的下一个元素.float a10,*p,*q;p=a;q=p+1; q=p+5;C程序设

10、计int a10,*p; p=p+ia+i*(p+i) *(a+i)aiC程序设计如果p的初值为int i;for(i=0;i10;i+)scanf(“%d“,printf(“n“);for(i=0;i10;i+)printf(“%d “,ai); C程序设计(2) 通过数组名计算数组元素地址,找出元素的值 。main( ) int a10; int i;for(i=0;i10;i+)scanf(“%d“,printf(“n“);for(i=0;i10;i+)printf(“%d “,*(a+i); C程序设计(3) 用指针变量指向数组元素。 main( ) int a10; int *p,i

11、;for(i=0;i10;i+)scanf(“%d“,printf(“n“);for(p=a;p(a+10);p+)printf(“%d “,*p); C程序设计三种方法的比较 (课后看213页)C程序设计使用指针变量时,注意: (1) 指针变量可以实现使本身的值改变。例如,上 述第3种方法是用指针变量p来指向元素,用p+使 p的值不断改变。如果不用p而使a变化(例如,用 a+)行不行呢?假如将上述3)程序的最后两行改为 for(p=a;a(p+10);a+) printf(“%d“,*a);C程序设计(2) 要注意指针变量的当前值。 例10.6 通过指针变量输出a数组的10个元素。 main

12、( ) int *p,i,a10;p=a;for(i=0;i10;i+)scanf(“%d“,p+);printf(“n“);for(i=0;i10;i+,p+)printf(“%d “,*p); 1 2 3 4 5 6 7 8 9 0 22153 234 0 0 30036 25202 11631 8259 8237 28483C程序设计main() int *p,i,a10;p=a;for(i=0;i10;i+)scanf(“%d“,p+);printf(“n“);p=a;for(i=0;i10;i+,p+)printf(“%d “,*p);C程序设计(3) 从上例可以看到,虽然定义数组时

13、指定它包含 10个元素,可以用p指向当前的数组元素。但是实 际上指针变量p可以指向数组以后的内存单元。如 果引用数组元素a10,C编译程序并不认为非法, 但会使程序得不到预期的结果。C程序设计(4) 注意指针变量的运算。 若有 p=a;/*前提*/ p+; b=*p; for(i=0;i10,i+) printf(“%d “,*p+);57a0a1p *p+ 等价于 *(p+) b=*p+; c=*p;例10.6 最后一个for语句: for(i=0;i10;i+,p+) printf(“%d “,*p);C程序设计 *(+p) 先使p加1,再取*p。 b=*(+p); (*p)+b=(*p)

14、+;57a0a1p 如果p当前指向a数组中第i个元素,则: *(p-):相当于ai-,先对p进行“*”运算,再使p自减 。 *(+p):先使p自加,再进行“*”运算。 *(-p):先使p自减,再进行“*”运算。b=5 a0=6C程序设计输出a数组100个元素: p=a; p=a; while(pmax) max=*p;else if(*pmin) min=*p; return; C程序设计归纳起来,如果有一个实参数组,想在函数中改 变此数组的元素的值,实参与形参的表示形式有 以下4种情况: (1) 形参和实参都用数组名,如: main() f(int x ,int n) int a10; f(a,10); C程序设计(2) 实参用数组名,形参用指针变量。如: main() f(int *x,int n) int a10; f(a,10); C程序设计(3) 实参形参都用指针变量。例如: main() f(int *x,int n) int a10, *p; p=a;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号