当前位置:
文档之家› 九、结构体—函数之间数据传递
九、结构体—函数之间数据传递
cout<<"利用引用传递数据后"<<endl<<"结构体存放内容"<<data.a<<" "<<(void *)&data.a<<endl;
cout<<" "<<data.b<<" "<<&data.b<<endl;
cout<<" "<<data.c<<" "<<&data.c<<endl<<endl;
cout<<" "<<data.b<<" "<<&data.b<<endl;
cout<<" "<<data.c<<" "<<&data.c<<endl<<endl;
//利用结构体传递数据
out_s(data);
//利用结构体指针传递数据
out_p(point);
//利用结构体引用传递数据
out_r(rdata);
{
arr[0].a='M';
arr[1].a='N';
}
void main()
{
struct A data={'h',2,3.3};
struct A *point=&data;
struct A &rdata=data;
struct A array[2]={{'X',23,45.44},{'Y',99,100.23}};
cout<<"结构体存放内容"<<s.a<<" "<<(void *)&s.a<<endl;
cout<<" "<<s.b<<" "<<&s.b<<endl;
cout<<" "<<s.c<<" "<<&s.c<<endl<<endl;
}
void out_p(struct A *p) //利用结构体指针传递数据
{
cout<<"利用指针传递数据,形参p内存地址"<<&p<<endl;
cout<<"形参p存放内容"<<p<<endl<<endl;
}
void out_r(struct A &r) //利用结构体引用传递数据
{
r.a='-';
r.b=0;
r.c=0;
}
void out_a(struct A arr[])
【程序源代码】
#include<iostream.h>
struct A//构建结构体,sizeof(A)=16
{
char a;
int b;
double c;
};
void out_s(struct A s) //利用结构体变量传递数据
{
cout<<"利用结构体传递数据形参s内存地址"<<&s<<endl;
out_a
数组传递
0x00401038
0x00401039
0x0040103A
0x0040103B
【运行结果】
(别名)
存放内容
0x0018FEB4
char
s.a
h
形参使用结构体,在内存开辟空间,用后释放,所以与之后形参指针在内存分配上有重合
0x00018FEB7
0x0018FEB8
int
s.b
2
0x0018FEB9
0x0018FEBA
0x0018FEBB
0x0018FEBC
cout<<" "<<array[0].c<<" "<<&array[0].c<<endl;
cout<<" "<<array[1].a<<" "<<(void *)&array[1].a<<endl;
cout<<" "<<array[1].b<<" "<<&array[1].b<<endl;
cout<<" "<<array[1].c<<" "<<&array[1].c<<endl<<endl;
//各函数地址
cout<<"变量传递,函数地址"<<out_s<<endl;
cout<<"指针传递,函数地址"<<out_p<<endl;
cout<<"引用传递,函数地址"<<out_r<<endl;
cout<<"数组传递,函数地址"<<out_a<<endl;
}
【内存分配】
形参
内存地址
类型
变量名称
0x0018FF12
0x0018FF13
0x0018FF14
int
array[0].b
23
0x0018FF15
0x0018FF16
0x0018FF17
0x0018FF18
double
array[0].c
45.44
0x0018FF19
0x0018FF1A
0x0018FF1B
0x0018FF1C
0x0018FF1D
array[1].c
100.23
0x0018FF29
0x0018FF2A
0x0018FF2B
0x0018FF2C
0x0018FF2D
0x0018FF2E
0x0018FF2F
0x0018FF30
0x0018FF31
0x0018FF32
0x0018FF33
0x0018FF34
struct A *
ponit
//利用结构体引用传递数据
out_a(array);
cout<<"利用数组传递数据后"<<endl<<"结构体存放内容"<<array[0].a<<" "<<(void *)&array[0].a<<endl;
cout<<" "<<array[0].b<<" "<<&array[0].b<<endl;
上一节课,我们知道了什么是结构体类型,以及结构体变量占据内存的大小。既然结构体是一个数据类型,那么,除了用它定义结构体变量之外,我们还可以用它来定义结构体数组、结构体引用与指针、结构体函数……其实,只要你懂得整型数组、整型变量的引用与指针、以及返回值为整型的函数等使用,就很容易理解结构体类型类似的用法。
0x0018FF3E
0x0018FF3F
0x0018FF40
double
data.c
3.3
0x0018FF41
0x0018FF42
0x0018FF43
0x0018FF44
函数
内存地址
类型
函数名称
存放内容
0x00401028
void
out_r
引用传递
0x00401029
0x0040102A
0x0040102B
0x0040102C
0x0040102D
void
out_p
指针传递
0x0040102E
0x0040102F
0x00401030
0x00401031
0x00401032
void
out_s
变量传递
0x00401033
0x00401034
0x00401035
0x00401036
0x00401037
void
cout<<"结构体data指针所在内存地址"<<&point<<endl;
cout<<"结构体data指针所存放内容"<<point<<endl;
cout<<"结构体data存放内容"<<data.a<<" "<<(void *)&data.a<<endl; //字符型变量输出内存地址一般要进行数据类型强制
0x0018FF38
0x0018FF35
0x0018FF36