资源描述:
《c语言程序设计 徐贞如 第9章指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章指针指针是C语言最具特色的语言成分,它是C语言的精华,同时又是C语言的难点。正确而灵活地运用指针,可以有效地表示复杂的数据结构;能高效地使用数组和字符串,能动态分配内存,在调用函数后改变有关变量的值,能直接处理内存地址,能完成有关文件的操作。若没有掌握指针,就没有真正掌握C语言,因此应在本章上多花工夫,多思考,多上机,在实践中掌握它。9.1地址和指针的概念9.1.1内存地址──内存中存储单元的编号计算机硬件系统的内存储器中,拥有大量的存储单元,一个字节为一个单元,内存是以字节为单位来存储数据的。为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的“地址”。每个存储单元都有
2、一个惟一的地址。如图9-1图9-19.1.2指针和指针变量指针——即是地址。指针变量——专门用于存放其它变量首地址的变量。例如:把2000存放在变量p中,通过p指向x变量,可以间接访问x变量。如:图9-1这里的p是指针变量,它指向x变量,x变量的首地址2000是x变量的指针。指针的概念变量与地址程序中:inti;floatk;内存中每个字节有一个编号-----地址…...…...2000200120022005内存02003ik编译或函数调用时为其分配内存单元变量是对程序中数据存储空间的抽象…...…...2000200420062005整型变量i10变量i_pointer2001200
3、22003指针与指针变量指针:一个变量的地址指针变量:专门存放变量地址的变量叫~2000指针指针变量变量的内容变量的地址指针变量变量变量地址(指针)变量值指向地址存入指针变量9.2指针变量的定义与应用9.2.1指针变量的定义一般格式:基类型*指针变量名在定义指针变量时要注意2点:(1)指针变量前面的*号表示变量的类型为指针变量。(2)在定义指针变量时必须指定基类型,它表示此指针是指向什么类型的变量。如:int*p;/*变量p是指针变量,它指向整型变量*/char*q;/*变量q是指针变量,它指向字符型变量*/9.2.2指针变量的引用指针变量中只能存放地址(指针),不能将一个整型量(或任何
4、其他非地址类型的数据)赋给一个指针变量。下面的赋值是不合理的:int*p;p=100;与指针变量的引用的两个相关运算:1.&——取地址运算符,它的作用是取得变量所占用的存储单元的首地址。2.*——指针运算符(或称“间接访问”运算符)。&与*运算符含义含义:取变量的地址单目运算符优先级:2结合性:自右向左含义:取指针所指向变量的内容单目运算符优先级:2结合性:自右向左两者关系:互为逆运算理解…...…...2000200420062005整型变量i10变量i_pointer2001200220032000指针变量i_pointer-----指针变量,它的内容是地址量*i_pointer--
5、--指针的目标变量,它的内容是数据&i_pointer---指针变量占用内存的地址200010i_pointer*i_pointer&i_pointerii_pointer&i&(*i_pointer)i*i_pointer*(&i)i_pointer=&i=&(*i_pointer)i=*i_pointer=*(&i)[例题9.1]输出两个整数的值/*例题源代码文件名:LT9_1.C*/main(){inta,b;int*p1,*p2;/*定义p1,p2两个指针变量*/a=20;b=30;p1=&a;/*将变量a的地址赋给指针变量p1*/p2=&b;/*将变量b的地址赋给指针变量p2*
6、/printf(“%d,%d”,a,b);/*输出a,b的值*/printf(“%d,%d”,*p1,*p2);/*将p1,p2指向的内存单元的值输出*/}运行结果:200,30200,30注意:(1)在定义指针变量的同时也可以初始化。inta,b;int*p1,*p2;a=20;b=30;p1=&a;p2=&b;可改写为:inta=20,b=30;int*p1=&a,*p2=&b;(2)一旦将变量a的地址赋给指针变量p1,那么*p1与a是等价的。(3)在指针变量定义语句中的星号“*”,是指针变量的标识符,不是指针运算。如例9-1第3行。除了指针变量定义语句,在其他语句的“*”号
7、都表示是指针运算。例9.2输入a,b两个整数,按降序(从大到小)顺序输出a、b的值。main(){int*p1,*p2,*p,a,b;scanf(“%d,%d”,&a,&b);/*输入两个整数给a、b*/p1=&a;p2=&b;/*使p1指向变量a,p2指向变量b*/if(*p1<*p2){p=p1;p1=p2;p2=p;/*交换两指针中的地址值*/}printf(“a=%d,b=%d”,a,b);printf(“max=%d,