c++指针,引用和结构体

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5

实验5:指针、引用和结构体

要求:

⑴掌握指针、指针变量、指针常量的基本概念;

⑵掌握指针与数组、指针与函数的关系及应用。

⑶初步掌握引用的概念及简单应用。

第一部分教程练习:

1.上机实验题一

观察程序运行结果,学习指针的基本运算。

⑴分析

变量和数组元素的地址都可以赋给一个指针,一个指针可以加上或减去一个整数;在两个指针指向同一数组不同元素时,可以进行减运算,结果为其间的数组元素个数。

一个完整的参考程序如下:

#include

void main()

{

int i,a[10];

int *p1,*p2;

p1=a; //A

p2=p1+5;

for (i=0;i<=9;i++) {

a[i]=i*i;

cout<<"a["<

}

cout<<"a="<

cout<<"p1="<

cout<<"p2-p1="<

cout<<"*p2-*p1="<<*p2-*p1<

}

实验5

⑵上机要求

将程序中A行改为“p1=&a[0]”观察程序运行结果。

将程序中B行改为“cout<<"*a="<<*a<

面向对象上机

将程序中C行改为“cout<<"a[5]-a[0]="<< a[5]-a[0]<

(3)对以上结果写出实验分析:

将程序中A行改为“p1=&a[0]”,结果不变,因为“a”和“&a[0]”都表示数组的首地址。将程序中B行改为“cout<<"*a="<<*a<

⒉上机实验题二

指出下列程序的错误。

#include

void exchange(int,int);

void main()

实验5

{

cout<<"Input two data seprated by space:";

int a,b;

cin>>a>>b;

cout<<"Before Exchange:a="<

exchange(a,b);

cout<<"After Exchange:a="<

}

void exchange(int x,int y)

{

int t;

t=x;x=y;y=t;

}

⑴分析

本例的目的是在子函数中交换的两个变量的值,在主函数中使用。但函数的数据传值调用方式是将实参的数据值传递给形参,实参和形参在内存中占用不同的地址单元,改变形参值不改变实参值。要想通过改变形参的值而改变实参的值,则应使用指针调用或引用调用。而且引用调用大有取代指针调用之势。

使用指针调用如下:

#include

void exchange(int*,int*);

void main()

{

cout<<"Input two data seprated by space:";

int a,b,*p1=&a,*p2=&b;

cin>>a>>b;

cout<<"Before Exchange:a="<

exchange(p1,p2);

cout<<"After Exchange:a="<

}

void exchange(int *x,int *y)

{

int t;

t=*x;*x=*y;*y=t;

}

使用引用调用如下(待讲完引用再做):

#include

void exchange(int&,int&);

面向对象上机

void main()

{

cout<<"Input two data seprated by space:";

int a,b;

cin>>a>>b;

cout<<"Before Exchange:a="<

exchange(a,b);

cout<<"After Exchange:a="<

void exchange(int &x,int &y)

{

int t;

t=x;x=y;y=t;

}

⑵上机要求

分别输出三个程序中形参和输出变量的地址。

实验5

(3)写出实验分析及结果

第一种方法的形参,实参的地址不同,交换的只是指针的指向,故不能实现实参的交换。第二种地址相同,交换的是实参的值。第三种是引用调用,交换的也是实参的值。

⒊上机实验题三

自定义函数实现字符串的拷贝。

⑴分析

字符串不允许进行赋值运算,只能使用头文件string.h中定义的strcpy()库函数。本例要求自己编制一个自定义函数实现strcpy()库函数的功能。

一个完整的参考程序如下:

#include

char *mycopy(char*,const char*);

void main()

{

char s1[]="I am a student";

char s2[20];

mycopy(s2,s1);

cout<<"s1="<

cout<<"s2="<

}

char *mycopy(char *to,const char *from)

{

char *temp=to;

for(;*to++=*from++;);

return temp;

}

⑵上机要求

将自定义函数改为下列程序段:

char *mycopy(char *to,const char *from)

相关文档
最新文档