C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt

上传人:b****1 文档编号:14209488 上传时间:2022-10-20 格式:PPT 页数:19 大小:1.03MB
下载 相关 举报
C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt_第1页
第1页 / 共19页
C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt_第2页
第2页 / 共19页
C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt_第3页
第3页 / 共19页
C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt_第4页
第4页 / 共19页
C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt

《C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt(19页珍藏版)》请在冰豆网上搜索。

C语言全国计算机二级等级考试教程d第八章地址和指针章节带习题PPT课件下载推荐.ppt

,31012,当访问变量时,为“直接存取(直接访问)”。

我们也可以通过指针变量间接的访问该地址中原来的值。

此时称为“间接存取(间接访问)”。

8.2指针变量的定义和指针变量的基类型,定义指针变量的一般形式如下:

类型名*指针变量名;

或类型名*指针变量名1,*指针变量名2,;

例如:

int*pi;

int*pj,*pa;

1.pi,pj,pa都是变量,不过都是指针变量,定义时在普通变量名的左边加上星号就行了。

说明:

pi,pj,pa三个指针变量的类型为整型,说明三个变量中只能存放int类型变量的地址。

这时我们称int是指针变量pi,pj,pa的基类型。

如:

double*pd;

char*s1,*s2;

pd的基类型为double类型,在指针变量pd中,只能存放double类型变量的地址。

s1和s2的基类型为char类型,在指针变量s1和s2中,只能存放char类型变量的地址。

8.3给指针变量赋值,8.3.1给指针变量赋地址值,例如:

intk,*q,*p;

/*k为整型变量,q和p都是指针变量。

*/,q,p,k,k=1;

/*给普通变量赋值*/,整型变量k只被能赋予整型值,赋值时直接赋值就可以了,而指针变量只能被赋予地址值,如下是把整型变量k的地址赋值给指针变量q。

q=,&

是用来求出变量的地址。

1,&

k,知识点:

由于把变量k的地址赋予了指针变量q,q中现在存放的就是变量k的地址,这时可以说:

q指向了变量k。

指针变量之间也可以进行赋值:

p=q;

&

k,当我们输出变量k,q,p时,输出的结果为;

112450521245052,8.3给指针变量赋值,8.3.2给指针变量赋“空”值,除了给指针变量赋地址值之外,还可以给指针变量赋一个特殊的值,该值为“空”值。

int*p;

p=NULL;

p=0;

注意,此时,指针变量p中不是没有值,而是有一个“空”值。

8.4对指针变量的操作,8.4.1通过指针来引用一个存储单元,#includemain()intk,*q,*p;

k=1;

q=,112450521245052,输出时,变量k为1,而指针变量q和p则为变量k的地址。

#includemain()intk,*q,*p;

q=,1,k,&

k,q,&

k,p,111,访问时,在指针变量前在*(间接访问运算符)则表示访问该地址中原来的值。

8.4对指针变量的操作,8.4.1通过指针来引用一个存储单元,假定有以下定义和语句:

int*p,i=10,j;

p=,/*定义了三个变量*/*取变量i的地址赋给指针变量p*/*间接访问指针变量中的值10赋给变量j*/,p,10,i,j,10,j=i;

间接访问运算符*是一个单目运算符,必须出现在运算对象的左边。

其运算对象可以是存放地址的指针变量,也可以是地址。

j=*(,j=*,扩展知识:

j=*p+1;

10,j,11,j,int*p,k=0;

p=,p,k,*p=100;

100,0,k=100;

*p=*p+1;

k=k+1;

101,*p+=1;

或+*p;

或(*p)+;

k+=1;

或+k;

或k+;

若有以下定义和语句:

int*p,*s,k=20;

s=,p,s,20,k,8.4对指针变量的操作,8.4.1通过指针来引用一个存储单元,程序举例:

例8.1用指针指向两个变量,通过指针运算选出值最小的那个数。

#includemain()inta,b,min,*pa,*pb,*pmin;

pa=,pa,pb,pmin,a,b,min,/*输入的值依次放入pa、pb所指存储单元中*/,scanf(“%d%d”,比如输入:

4132,41,32,a=41b=32,min=a;

41,if(ab)min=b;

32,min=32,8.4对指针变量的操作,8.4.2移动指针&

8.4.3指针比较,所谓移动指针就是对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储单元。

假定在内存中开辟了如图所示的五个连续的、存放int类型整数的存储单元,并分别给它们取代号为:

a0、a1、a2、a3、a4。

这些代号所代表的存储单元中,分别有值为:

11、22、33、44、55。

a0a1a2a3a4,1122334455,例如:

int*p,*q;

p=,p,q=p+2;

q+;

q-;

p+;

q,q,q,p,当有:

inti,j,k;

i=*p;

j=*q;

k=q-p;

i,j,k,22442,指针比较,if(pq)printf(“ppointstolowermemorythanq.n”);

elseprintf(“qpointstolowermemorythanp.n”);

ppointstolowermemorythanq.,if(p=0)printf(“ppointstoNULL.N”);

8.5函数之间地址值的传递,8.5.1形参为指针变量时实参和形参之间的数据传递,例8.2程序举例。

#includeintmyadd(int*a,int*b)intsum;

sum=*a+*b;

returnsum;

main()intx,y,z;

printf(“Enterx,y:

”);

scanf(“%d%d”,x,y,z,Enterx,y:

2441,24,41,调用,传递,a,b,sum,sum=x+y;

65,退出函数,将变量sum的值作为这个函数的返回值,返回到他的调用处。

此时,该函数中的变量全部释放。

65,65,24+41=65,8.5函数之间地址值的传递,8.5.2通过传递地址值在被调用函数中直接改变调用函数中的变量的值,例8.3调用swap函数,交换主函数中变量x和y中的数据。

第七章例7.3的重写,#includevoidswap(int*,int*);

main()intx=30,y=20;

printf

(1)x=%dy=%dn,x,y);

swap(,/*函数说明语句*/,x,y,

(1)x=30y=20,调用,传递,a,b,t,

(2)a=30b=20,(3)a=20b=30,退出该函数,返回到它的调用处,该函数无返回值,因为该函数为void类型,此时该函数中的变量全部释放。

(4)x=20y=30,t=x;

x=y;

y=t;

30,20,20,30,8.5函数之间地址值的传递,8.5.2通过传递地址值在被调用函数中直接改变调用函数中的变量的值,例8.4编写函数order(int*a,int*b),使调用函数中的第一个实参总是存放两个数中的较小的数,第二参数存放两个数中较大的数。

#includevoidswap(int*x1,int*x2)intt;

t=*x1;

*x1=*x2;

*x2=t;

voidorder(int*a,int*b)if(*a*b)swap(a,b);

main()intx,y;

printf(Enterx,y:

);

scanf(%d%d,x,y,Enterx,y:

4124,41,24,x=41y=24,调用,a,b,传递,if(xy)swap(a,b);

调用并传递数据,x1,x2,t=x;

24,41,x=24y=41,8.5函数之间地址值的传递,8.5.3函数返回地址值,#includeint*fun(int*,int*);

main()int*p,i,j;

printf(Entertwonumber:

scanf(%d%d,/*函数说明*/,例8.5程序举例。

p,i,j,Entertwonumber:

99101,99,101,传递,a,b,if(ij)returna;

退出该函数,返回到它的调用处,该函数的返回值是一个地址(j的地址),所以该函数是一个指针类型。

退出时该函数中的变量全部释放。

i=99,j=101,*p=101,习题,一.选择题8.1若有定义:

intx,*pb;

则正确的赋值表达式是Apb=程序的输出结果是A5,2,3B-5,-12,-7C-5,-12,-17D5,-2,-7,A,B,B,习题,8.4若有以下程序:

#includemain()intk=2,m=4,n=6,*pk=后,*p的值是A20B30C21D318.6若指针p已正确定义并指向如图所示存储单元,则*+p的值是A20B30C21D318.7若指针p已正确定义并指向如图所示存储单元,则+*p的值是A20B30C21D31,a0a1a2a3a4,1020304050,p,C,B,B,C,习题,8.8若有以下程序:

#includevoidprtv(int*x)printf(%dn,+*x);

main()inta=25;

prtv(程序的输出结果是A运行错误B100Ca的地址Db的地址,D,B,习题,8.10若有以下程序:

#includevoidfun(float*a,float*b)floatw;

*a=*a+*a;

w=*a;

*a=*b;

*b=w;

main()floatx=2.0,y=3.0,*px=程序的输出结果是A4,3B2,3C3,4D3,2,8.11若有以下程序:

#includevoidsub(doublex,double*y,double*z)*y=*y-1.0;

*z=*z+x;

main()doublea=2.5,b=9.0,*pa,*pb;

pa=程序的输出结果是A9.000000B1.500000C8.000000D10.500000,C,C,习题,8.12以下四个程序中不能对两个整型值进行交换的是A#includeB#includevoidswap(int*p,int*q)voidswap(int*p,int*q)int*t,a;

intt;

t=,C,习题,二.填空题8.13以下程序段的输出结果是_.int*var,b;

b=100;

var=,110,71,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1