| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 209 人关注过本帖
标题:关于数据类型的问题,急求解答
收藏  订阅  推荐  打印
v1ng
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2008-7-22
关于数据类型的问题,急求解答

#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)到底有什么区别?????
急求....

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

[ 本帖最后由 v1ng 于 2008-7-22 16:03 编辑 ]
2008-7-22 15:21
v1ng
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2008-7-22

由于来的比较急,就发了贴子,现在自己搞定了这个小问题.下面是我的总结,希望给遇到同样问题的朋友一个小参考.....

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-7-22 17:08
zjl138
Rank: 4
等级:高级会员
帖子:764
积分:9144
威望:1
注册:2007-11-12

支持一下,楼主做的很好.不过有几点可以改进一下.
首先:iostream.h这个头文件已经过时,可能楼主看的书也是比较老版本的,没改过来.其次void main(){}这种写法在很多编译器已不支持,甚至报错.
建议改为:
#include<iostream>
using namespace std;
int main(void)
{
   ...
   ...
   return 0;
}

i like linux...
2008-7-22 18:13
共有 208 人关注过本帖
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.071771 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved