资源描述:
《c语言__地址和指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第8章地址和指针基本知识讲解§8.1指针的基本概念§8.2指针变量的定义§8.3给指针赋值§8.4对指针变量的操作§8.5函数之间地址值传递返回§8.1变量的地址和指针一、地址存储单元的编号。0000→0001→……FFFF→0002→例:设有变量说明:shortinta;floatb;doublec;ee00ee01ee02ee03ee04ee05a占用…b占用c占用ee0d…§8.1变量的地址与指针变量i_pointer200020022004……3010……3692000变量i变量j变量k……直接访问间接访问§8.1变量的地址与指针指针2000i3直接访问2000i
2、32000i_pointer间接访问§8.1变量的地址与指针二、指针指针就是地址,即内存单元的编号。内存单元的指针和内存单元的内容是两个不同的概念。用于存放指针的变量称为指针变量。§8.1变量的地址与指针地址2000是变量i的指针;i_pointer是指针变量,其值就是指针2000。#2000i32000i_pointer§8.1变量的地址与指针返回§8.2指针变量的定义与基类型如何定义一个指针变量变量的指针:即变量的地址。指针变量:存放变量地址的变量。对指针变量的定义包含三方面的内容:定义变量为一个指针变量;指针变量名;指针变量所指向的变量的数据类型。§8.2指针变量的
3、定义与基类型定义格式:存储类型基类型*指针变量名;如:int*p1,*p2;float*p3;char*p4;返回§8.3给指针变量赋值1.通过取地址运算符&获得地址值inta=20,*pa;pa=&a;5变量a&a指针变量pa§8.3给指针变量赋值2.通过指针变量获得地址值inta,*pa=&a,*pb;pb=pa;a&apa&apb§8.3给指针变量赋值3.给指针变量赋空值int*p=0;int*p=NULL;空指针与无指向的指针是有区别的。不要将一个整数值赋予一个指针变量,那样做无意义返回§8.4对指针变量的操作一、指针变量有两个运算符(1)取地址运算符&功能:取变
4、量的地址;单目,右结合(2)取内容运算符*功能:指针运算符(间接访问运算符)单目,右结合§8.4对指针变量的操作如:inta=5,*p=&a;printf(“%d”,*p);指针变量p&a5变量a§8.4对指针变量的操作输出结果为:100,10100,10例main(){inta,b;int*p1,*p2;a=100;b=10;p1=&a;p2=&b;printf(“%d,%d”,a,b);printf(“%d,%d”,*p1,*p2);}§8.4对指针变量的操作例8.1用指针指向两个变量,通过指针运算选出值小的那个数。§8.4对指针变量的操作#inc
5、ludemain(){inta,b,min,*pa,*pb,*pmin;pa=&a;pb=&b;pmin=&min;scanf("%d%d",pa,pb);printf("a=%d,b=%d",a,b);if(*pa>*pb)*pmin=*pb;else*pmin=*pa;printf("min=%d",*pmin);getch();}§8.4对指针变量的操作二、指针的移动指针能进行加、减算术运算,表示指针的移动。如:p+np-np++p--++p--pp-=np+=np1-p2等其中n是整数,p、p1、p2均为指针;移动长度取决于指针的基类
6、型,由计算机决定;§8.4对指针变量的操作注:p1+k=p1+k*sizeof(p1的基类型);p1-k=p1-k*sizeof(p1的基类型);例如:设有如下定义和语句:inta[5]={1,2,3,4,5},*p1,*p2;p1=a;p2=p1+1;p2++;p2++;p2--;p1+=4;§8.4对指针变量的操作§8.4对指针变量的操作三、指针的比较设指针p1、p2指向同一数组中的元素,则:p17、,不可比较;允许将指针与NULL或数值0进行==或!=的比较,以便判定一个是否为空。#返回§8.5函数之间地址值的传递例8.3对输入的两个整数按大小顺序输出。(与原题略有不同)先考察如下程序,看是否能得到预期的结果。§8.5函数之间地址值的传递main(){inta,b;scanf(“%d,%d”,&a,&b);if(a