资源描述:
《幻灯片_C语言程序设计视频教程_徐红波_第10章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C程序设计讲师:徐红波Email:x_h_b@tom.com第10章指针指针是C语言中的一个重要概念,也是C语言的一个重要特色。正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;方便地使用字符串;有效而方便地使用数组;在调用函数时能获得1个以上的结果;能直接处理内存单元地址等,这对设计系统软件是非常必要的。掌握指针的应用,可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人,都应当深入地学习和掌握指针。可以说,不掌握指针就是没有掌握C的精华。10.1地址和指针的概念变量的属性:
2、名、值和地址变量的访问方式:直接访问、间接访问变量的地址称为该变量的“指针”指针变量是存放地址的变量10.2变量的指针和指向变量的指针变量变量的指针就是变量的地址。存放变量地址的变量是指针变量,它用来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在程序中用“*”符号表示“指向”。如果已定义i_pointer为指针变量,则(*i_pointer)是i_pointer所指向的变量。10.2.1定义一个指针变量C语言规定所有变量在使用前必须定义,指定其类型,并按此分配内存单元。指针变量不
3、同于整型变量和其他类型的变量,它是用来专门存放地址的,必须将它定义为“指针类型”。定义指针变量的一般形式为基类型*指针变量名;可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个该变量。在定义指针变量时要注意两点:(1)指针变量前面的“*”表示该变量的类型为指针型变量(2)在定义指针变量时必须指定基类型10.2.2指针变量的引用指针变量中只能存放地址(指针),不要将一个整数(或其他非地址类型的数据)赋给一个指针变量。有两个有关的运算符:(1)&:取地址运算符(2)*:指针运算符(或
4、称“间接访问”运算符),取其指向的内容。[例10.1]通过指针变量访问整型变量#includevoidmain(){inta,b;int*pointer_1,*pointer_2;a=100;b=10;pointer_1=&a;pointer_2=&b;printf(“%d,%d”,a,b);printf(“%d,%d”,*pointer_1,*pointer_2);}对“&”和“*”运算符再作说明:如果已执行了语句pointer_1=&a;(1)&*pointer_1
5、(2)*&a(3)(*pointer_1)++[例10.2]输入a和b两个整数,按先大后小的顺序输出a和b#includevoidmain(){int*p1,*p2,*p,a,b;scanf(“%d,%d”,&a,&b);p1=&a;p2=&b;if(a6、符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。[例10.3]题目要求同例10.2,即对输入的两个整数按大小顺序输出#includevoidmain(){voidswap(int*p1,int*p2);inta,b;int*pointer_1,*pointer_2;scanf(“%d,%d”,&a,&b);pointer_1=&a;pointer_2=&b;if(a7、%d”,a,b);}voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}[例10.4]输入a、b、c这3个整数,按大小顺序输出voidmain(){inta,b,c,*p1,*p2,*p3;scanf(“%d,%d,%d”,&a,&b,&c);p1=&a;p2=&b;pe=&c;exchange(p1,p2,p3);printf(“%d,%d,%d”,a,b,c);}voidexchange(int*q1,int*q2
8、,int*q3){if(*q1<*q2)swap(q1,q2);if(*q1<*q3)swap(q1,q3);if(*q2<*q3)swap(q2,q3);}voidswap(int*pt1,int*pt2){inttemp;temp=*pt1;*pt1=*pt2;*pt2=temp;}10.3数组与指针一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素