电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C++/VC>>新手入门:C/C++中的结构体:

新手入门:C/C++中的结构体

来源:远方网络 | 2006-1-6 | (有1936人读过)

例程2的效率要远高过例程1的原因主要有以下两处:

第一:

例程1中的

test get_score()

{

test pn;

cin>>pn.name>>pn.socre;

return pn;

} 调用的时候在内部要在栈空间开辟一个名为pn的结构体变量,程序pn的时候又再次在栈内存空间内自动生成了一个临时结构体变量temp,在前面的教程中我们已经说过,它是一个copy,而例程2中的:

void get_score(test &pn)

{

cin>>pn.name>>pn.socre;

} 却没有这一过程,不开辟任何新的内存空间,也没有任何临时变量的生成。

第二:

例程1在mian()中,必须对返回的结构体变量进行一次结构体变量与结构体变量直接的相互赋值操作。

for(int i=0;i<num;i++)

{

a[i]=get_score();

} 而例程2中由于是通过内存地址直接操作,所以完全没有这一过程,提高了效率。

for(int i=0;i<num;i++)

{

get_score(a[i]);

}

函数也是可以返回结构体应用的,例子如下:

#include<iostream>

#include<string>

usingnamespacestd;

structtest

{

charname[10];

floatsocre;

};

testa;


test&get_score(test&pn)

{

cin>>pn.name>>pn.socre;

returnpn;

}

voidprint_score(test&pn)

{

cout<<pn.name<<"|"<<pn.socre<<endl;

}

voidmain()

{

test&sp=get_score(a);

cin.get();

cout<<sp.name<<"|"<<sp.socre;

cin.get();

}

调用get_score(a);结束并返回的时候,函数内部没有临时变量的产生,返回直接吧全局结构变量a的内存地址赋予结构引用sp

最后提一下指针的引用

定义指针的引用方法如下:

voidmain()

{

inta=0;

intb=10;

int*p1=&a;

int*p2=&b;

int*&pn=p1;

cout<<pn<<"|"<<*pn<<endl;

pn=p2;

cout<<pn<<"|"<<*pn<<endl;

cin.get();

}

pn就是一个指向指针的引用,它也可以看做是指针别名,总之使用引用要特别注意它的特性,它的操作是和普通指针一样的,在函数中对全局指针的引用操作要十分小心,避免破坏全局指针!
C++/VC热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号