第9章指针实验1Word下载.docx

上传人:b****6 文档编号:16645790 上传时间:2022-11-25 格式:DOCX 页数:16 大小:126.82KB
下载 相关 举报
第9章指针实验1Word下载.docx_第1页
第1页 / 共16页
第9章指针实验1Word下载.docx_第2页
第2页 / 共16页
第9章指针实验1Word下载.docx_第3页
第3页 / 共16页
第9章指针实验1Word下载.docx_第4页
第4页 / 共16页
第9章指针实验1Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

第9章指针实验1Word下载.docx

《第9章指针实验1Word下载.docx》由会员分享,可在线阅读,更多相关《第9章指针实验1Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

第9章指针实验1Word下载.docx

pi=&

pj=pi;

3.1画出变量i、pi和pj的形象状态图。

3.2对于变量i所标识的存储单元,现在有几种使用途径?

3.3分析下面语句的输出并编程验证。

*pj=i+*pi;

%d,%d,%d\n"

i,*pi,*pj);

4.分析并比较下面三个程序的输出。

4.1

#include<

stdio.h>

voidmain()

{

inti=3,j=2;

int*pi,*pj,*ptemp;

pj=&

j;

%d,%d\n"

i,j);

*pi,*pj);

ptemp=pi;

pi=pj;

pj=ptemp;

}

4.2

inti=3,j=2,temp;

int*pi,*pj;

temp=*pi;

*pi=*pj;

*pj=temp;

4.3

temp=i;

i=j;

j=temp;

5.有int*pi;

,如何评价语句pi=&

pi;

实验9-2空指针

进一步理解指针变量的作用。

1.分析讨论下面程序的说法。

使用指针变量有两个步骤。

第一步:

通过赋值(初始化)操作使指针变量指向某存储单元。

(如inti,*pi=&

或pi=&

或pi=pj;

等)

第二步:

通过间接引用操作符使用指针变量指向的存储单元。

(如printf("

%d"

*pi);

或*pi=5;

2.指出并改正下面程序中的错误。

floatf=2.3,*pf;

*pf=*pf**pf;

%f,%d\n"

f,*pf);

3.分析下面的程序。

3.1

#include<

int*pi;

pi=5;

3.2

pi=0;

3.3

inti;

scanf("

i);

if(i>

NULL)

printf("

%d是正数!

\n"

i);

else

%d是非正数!

分析:

1)3.1和3.2两个程序有何区别?

2)如何评价程序3.3?

0与NULL相同吗?

通常如何使用?

4.(练习9.13)已知整型指针变量pa,pb,pc分别指向整型变量a,b,c。

按下面要求编程。

4.1使用指针交换a,b,c的值,使变量a,b,c按升序排列。

(指针指向的对象不变,即pa一直指向a。

4.2变量a,b,c的值不变,但pa,pb,pc指向的变量按升序排列(即pa指向值最小的变量。

实验9-3函数的形参为指针变量

理解地址传递的特点,掌握指针为形参时的用法。

1.分析求两个整数和的函数。

1.1程序如下:

intadd(intx,inty)

intz;

z=x+y;

returnz;

voidmain()

inta=23,b=-5;

intc;

c=add(a,b);

%d+%d=%d\n"

a,b,c);

如图1所示,C语言中函数调用最重要的特点是传值调用。

图1函数的传值调用

1.2程序如下:

intadd(int*x,int*y)

z=*x+*y;

c=add(&

a,&

b);

1)把程序补充完整。

使用函数调用add(a,b)可以吗?

为什么?

2)使用函数调用add(&

a,&

b)可以吗?

假设此时变量a和b的地址分别为0x0012ff7c和0x0012ff78,把图2补充完整。

图2函数的传值调用

指针变量x的内容为变量a的地址,也就是说指针变量x指向了变量a,使用*x也可以访问变量a所标识的存储单元了。

3)为什么可以在add函数中使用main函数中的变量a?

答:

这个问题有问题!

add函数中不可以使用变量a,在add函数中只是使用了变量a所标识的存储单元!

只要存储单元归程序所有就可以通过指针使用它!

2.分析下面的程序。

voidchange(float*pf)

*pf=5.23;

floatfa=2.3;

%f\n"

fa);

change(&

fa);

change函数为何可以改变main函数中局部变量fa的值?

3.根据指针做参数的特点,改写add函数使其返回值为void,其首部为voidadd(intx,inty,int*pSum)。

1)改写后的函数如何使用?

2)与实验7-5中的add函数相比有何差异?

3)C语言中所有的函数都可以没有返回值吗?

4.scanf函数为何可以改变“实参”的值?

4.1当用户输入23回车时,下面的程序有何输出?

inti,*pi=&

pi);

i,*pi);

4.2分析下面的程序。

charbuffer[100]="

23\n"

;

voidscanInt(int*p)

intvalue=0;

inti=0;

while(buffer[i]!

='

\n'

{

value=value*10+(buffer[i]-'

0'

);

++i;

}

*p=value;

scanInt(&

%d\n"

实验9-4函数的返回值为指针变量

进一步理解野指针。

1.分析下面的程序(例9-9)。

int*test()

inti=5,*pi=&

returnpi;

voidtest2()

intj=3;

int*pj;

pj=test();

test2();

*pj);

程序的输出结果为3,不是5,为什么?

2.比较下面两个程序。

2.1

voidtest(int*pi)

*pi=5;

int*p;

test(p);

程序中其它功能……\n"

2.2

if(pi==NULL)

错误!

实参为空指针!

return;

int*p=NULL;

1)两个程序中有语法错误吗?

第一个程序会出现错误,非法访问!

第二个*pi=5有语法错误。

2)两个程序运行结果相同吗?

第一个出现非法访问

第二个是:

注意:

在函数中检测指针参数是否为空指针会提高代码的健壮性。

负责的程序员必须保证指针变量指向合法的地址。

实验9-5指针变量的运算

理解指针变量运算的特点。

1.分析程序指出数组元素在内存中的存放特点。

1.1

inta[3]={1,2,3};

for(i=0;

i<

3;

++i)

%x\t"

a[i]);

1.2

charch[6]="

China"

6;

ch[i]);

1.3

intb[2][3]={1,2,3,4,5,6};

inti,j;

2;

for(j=0;

j<

++j)

printf("

b[i][j]);

2.分析下面的程序,并根据输出结果分析指针变量运算的特点。

inti,*p;

p=&

a[0];

++i,++p)

a[%d]:

%x,%d\n"

i,&

a[i],a[i]);

i,p,*p);

2.2参照2.1编程使用指针变量输出1.2中数组的元素。

2.3参照2.1编程使用指针变量输出1.3中数组的元素。

3.指针变量p的内容为0x0012ff00,求出表达式p+1的值和类型。

4.分析程序。

int*pa,*p;

pa=&

for(p=pa;

p<

=&

a[2];

++p)

%d\t"

p-pa,*p);

1)写出程序的输出,并说明程序的执行过程。

2)利用指针,编程从右至左输出数组元素即依次输出a[2],a[1],a[0]。

p>

--p)

pa-&

a[0],*p);

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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