标题:关于数据类型的问题,急求解答
取消只看楼主
v1ng
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-7-22
 问题点数:0 回复次数:1 
关于数据类型的问题,急求解答
#include "iostream.h"

struct Sq{    //定义一个Sq的结构体
int v;
};
int SqL(Sq &L)  //定义一个SqL的函数
{
L.v=10;
return L.v;
}
void main()
{
Sq La;
cout<<SqL(La)<<endl; //调用SqL函数
}


写了一个简单的小例子,我的问题是:
函数SqL的形参(Sq &L)是什么数据类型的?
希望高手指点,感谢.

还有就是如果形参(Sq &L)换成(Sq L)到底有什么区别?????
急求....

[[it] 本帖最后由 v1ng 于 2008-7-22 16:03 编辑 [/it]]

[[it] 本帖最后由 v1ng 于 2008-7-22 16:03 编辑 [/it]]
搜索更多相关主题的帖子: 类型 数据 int 解答 void 
2008-07-22 15:21
v1ng
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-7-22
得分:0 
由于来的比较急,就发了贴子,现在自己搞定了这个小问题.下面是我的总结,希望给遇到同样问题的朋友一个小参考.....

SqL(Sq &L)事实上是一个引用,就是传递进来的是地址值,相当于指针,如果在这个函数内部进行数值操作就可以改变原来传递的实参值
下面是我给出两个例子来对比....

#include   "iostream.h"
struct SqList
{
    int v1;
};   
void Sq(SqList L)
{
    L.v1=30;
    cout<<L.v1<<endl;   //此处在于对比调用前后变化
}
void main()
{
    SqList La,Lb;
    La.v1=20;  //此处的结构体变量La没有调用函数前,其成员v1值是20;
    cout<<La.v1<<endl; //直接输出肯定是20;
    Sq(La); //关键部分在这,进行函数调用时,单向值传递,则函数SqL就打印出L.v1=30,同时La.v1的值却没有变化.
    cout<<La.v1<<endl; //所以在这打印出La.v1依然是20;
    }
打印结果是:
20
30
20
总结1:单向值传递,互不相干.无变化.

第二个例子:
#include   "iostream.h"
struct SqList
{
    int v1;
    int v2;
};   
void Sq(SqList &L)        //仅仅加了一个取地址符&,相当于L是调用它的实参的引用,语言表述不准确,应该可以这样理解...
{
    L.v1=30;
    cout<<L.v1<<endl;
}
void main()
{
    SqList La,Lb;
    La.v1=20;   /同样,没有调用函数前,La.v1=20;
    cout<<La.v1<<endl;              //输出La.v1的值是20
    Sq(La);  //进行函数调用时,因为形参L改变了,即L.v1=30,因为L引用La,所以处于同一个内存地址,L改变,La也改变.....,打印L.v1=30;
    cout<<La.v1<<endl;  //所以这句就很好解释,就是La.v1=30
    }
打印结果是:
20
30
30

总结一下:Sq &L,简单一句话理解就是L引用其实参La(在本例中,也就是共处同一段地址);更简单点理解,就是一指针

虽然例子有点简单,但可以引出很多更复杂的结构设计,可以参阅网上的相关文章,希望能给大家一点帮助,也算是自己的学习心得,加深印象,呵呵
2008-07-22 17:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-224815-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.122079 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved