资源描述:
《谭浩强_c语言程序设计教程_学习笔记_第8章.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章指针8.1地址和指针的概念按变量地址存取变量值的方式,成为“直接访问”方式。“间接访问”将变量的地址存放在另一个变量中。一个变量的地址称为该变量的“指针”。如果有一个变量专门用来存放另一个变量的地址(即指针),则它称为“指针变量”,指针变量就是地址变量(存放地址的变量)。指针变量的值(即指针变量中存放的值)是地址(指针)。8.2变量的地址和指向变量的指针地址变量的指针就是变量的地址。存放地址的变量是指针变量,它用来指向另一个变量。用“*”表示“指向的对象”。8.2.1怎样定义指针变量?指针变量的基类型用来指定此指针变量可以指向的变量类型。
2、定义指针变量一般形式为:基类型*指针变量名;说明:(1)指针变量前的“*”表示该变量的类型为指针类型。(2)定义指针类型时必须指定基类型。对指针变量赋值时需要注意:(1)指针变量中只能存放地址。(2)赋给指针变量的变量地址不能是任意类型,而只能是与指针变量的基类型具有相同类型的变量的地址。8.2.2怎样引用指针变量(1)给指针变量赋值。p=&a;(2)引用指针变量的值。如:printf(“%o”,p);作用是以八进制输出指针变量p的值,如果p指向了a,就是输出a的地址,即&a。(3)引用指针变量指向的变量。(1)“&”算去地址运算符。(2)“*
3、”指针运算符。例8.1通过指针变量访问整型变量#includeintmain(){inta,b;int*pointer_1,*pointer_2;a=100;b=200;pointer_1=&a;pointer_2=&b;printf("a=%d,b=%d",a,b);printf("*pointer_1=%d,*pointer_2=%d",*pointer_1,*pointer_2);return0;}例8.2输入a,b连个整数,按先大后小的顺序输出a,b。#includeintmain(){int*p
4、,*p1,*p2;inta,b;printf("pleaseentera,b:");scanf("%d,%d",&a,&b);p1=&a;p2=&b;if(aint
5、main(){voidswap(int*,int*);int*p1,*p2;inta,b;printf("pleaseentera,b:");scanf("%d,%d",&a,&b);p1=&a;p2=&b;if(a
6、,但是却可以改变实参指针变量所指变量的值。例8.4输入3个整数a,b,c,要求按大小顺序将它们输出。用函数实现改变这3个变量的值。#includeintmain(){voidexchange(int*,int*,int*);int*p3,*p1,*p2;inta,b,c;printf("pleaseentera,b,c:");scanf("%d,%d,%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);printf("%d,%d,%d",a,b,c);return0;}
7、voidexchange(int*q1,int*q2,int*q3){voidswap(int*,int*);if(*q1<*q2)swap(q1,q2);if(*q1<*q3)swap(q1,q3);if(*q2,*q3)swap(q2,q3);}voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}8.3通过指针引用数组8.3.1数组元素的指针所谓数组元素的指针就是数组元素的地址。8.3.2指针的运算说明:(1)P+1指向同一数组中的下一个元素,p-1指向同一数组中的上一个元素
8、。(2)如果p原来指向a[0],执行++p后p的值改变了,在p的原值基础上加d,这样p就指向数组的下一个元素a[1].(3)如果p的初值是&a[0],