迷惑不解,请教了 我知道“&”是取地址,如p=&data,则p指向了变量data。但下面的两个函数声明我不理解,请高手指教,请讲的通俗一些,详细一些,便于理解,谢谢了:(1)CType& Function( ) //不理解,但CType* Function( )我理解;(2)CType1 Function(CType2 &var ) // 不理解,但CType1 Function(CType2 *var )我理解。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 &在c里只有取地址的意思,但在c++和vc里还有引用的意思 1、表示反回Ctype的引用2、要传递引用 引用楼上“你可以把“引用”理解为被引用变量的别名,所有对引用的操作都等于对被引用变量的操作”续问————那么:(1)函数“CType& Function( ) ”返回了哪个变量的引用了呢? (2)函数“CType1 Function(CType2 &var ) ”传递了哪个变量的引用了呢?请指教,谢谢。 (1)这种用法本身就是错误的,返回了一个局部变量的引用(2)调用Function(x);函数中对VAR的操作都等于对X的操作 回并问楼上: (1)CType& Function( ) 我是仿照书上写的,书上的是:CRect& GetBoundingRect(){return m_rectBounding;}。那么为什么说是错误的?另外他返回了哪一个局部变量的引用?请指教,谢谢。 哦。m_rectBounding是在函数GetBoundingRect()的外面定义的:CRect m_rectBounding; void ReturnNum1(int a){ a=10;}void ReturnNum2(int &a){ a=10;}//////////////////////....int b;b=5;ReurnNum1(b);//函数运行后b=5;这种方式下相当于int a;a=b;a=10;ReturnNum2(b);//函数运行后b=10;这种方式下,a与b完全一样,a=10;相当于b=10; 引用是这样定义的:引用型变量是一种不具备自己的实际数据保存空间的变量,它的实质仍然是指针,但引用型变量采用了不同于指针的表示方式。使用引用型变量可以简化对函数有多个返回值时的处理,使得程序清晰明了。(也就是说,是2个不同名字的变量使用同一个地址空间。)原形:数据类型& 变量名=相同数据类型的变量;例:int& nVal1=nVal2nVal1与nVal2同为int型。。使用同一个地址。。对nVal1的操作就是对nVal2的操作。如nVal2=8;nVal1=3;那么,MessageBox(int(nVal2));的输出值也为3;这就是引用的实质。上面提到的问题是这样的。1)CType& Function( ) 引用的方式不太正规基本属于错误,可是语法不算错误。结果没测试过。大概应该返回的是函数本身。也就是自己引用了自己。。就如同这个简单的例子。 int &nVal1=nVal2(2)CType1 Function(CType2 &var ) 他其实是对函数本身的参数的引用。也就是对函数原形的参数的引用,简单理解为Functiong(CType2 x)CType2 &var=x;我是一个打了一年基础的垃圾程序员,呵。。希望我们共同学习。。共同进步。希望我的讲解能给你带来方便。。 我写错了。。(1)的例子应该是int &nVal1=nVal1; 非常感谢楼上的朋友给我讲得这么详细,读完你的回复,我已经完全明白了第(2)种的引用形式;对于第(1)种的引用形式还有一点模糊。另外,我说一点意见,我觉得引用就是解决了函数的传址问题,其实完全可以用1nt* var这种容易理解的形式代替引用。VB中,有ByVal var和ByRef var来表示传值和传址,我觉得是光辉的典范。而C++就显得烦琐了。 谢谢。顺便问一下:VC6好象不支持以前的C语言呀,如:在C语言中,下面的函数定义是正确的int Function(var)int var;{ printf(var); return 0;}但在C++中却是错误的,为什么? printf(var);关键在这里。。printf()这是c 里面的。。不是 vc++里面的。。所以不支持。。但是。。在vc++中是可以实现的。。在c中这个程序用到了一个头文件。。你只需要把他的名字+上.c包含在你的vc++的头文件里就可以了。记得要声明std::函数名 我知道要包含文件 #include "stdio.h",不是这个原因。原因是VC6不允许这样定义函数: int Function(var) int var; { ...; }VC6要求将int var;放入{ }中: int Function(var) { int var; ...; }因此,以前的C程序不能移植到VC6中了。 哦,说错了:VC6要求 不用语句int var;但参数表中要求有说明符int,: int Function(int var) { ...; } 怎么用多个定时器模拟交通灯(红,黄,绿),大侠们看下我的问题 如何定位到视图的某一位置 HTTP 上传文件到服务器的问题,网上的例子 UseHttpSendReqEx 多线程编程,怎么去调试? 好请高手们指点指点! 怎样获取edit box中输入的成员变量的值,成员变量为int型 初学VC,请结合例子谈谈_ConnectionPtr与_RecordsetPtr的具体用法。 在新机子安装VC6发现的一个问题。。 刚学会VC不久,不知我这样的水平可以拿多少工资? Edit control 的一个怪问题 COM 自动化参数传递机制 怎么以非模态形式显示窗口? 怎么样调用dll的问题??
2、要传递引用
函数中对VAR的操作都等于对X的操作
{
a=10;
}
void ReturnNum2(int &a)
{
a=10;
}
//////////////////////
....
int b;
b=5;
ReurnNum1(b);
//函数运行后b=5;这种方式下相当于int a;a=b;a=10;
ReturnNum2(b);
//函数运行后b=10;这种方式下,a与b完全一样,a=10;相当于b=10;
原形:数据类型& 变量名=相同数据类型的变量;
例:int& nVal1=nVal2
nVal1与nVal2同为int型。。使用同一个地址。。对nVal1的操作就是对nVal2的操作。如
nVal2=8;
nVal1=3;
那么,MessageBox(int(nVal2));的输出值也为3;
这就是引用的实质。上面提到的问题是这样的。
1)CType& Function( ) 引用的方式不太正规基本属于错误,可是语法不算错误。结果没测试过。大概应该返回的是函数本身。也就是自己引用了自己。。就如同这个简单的例子。 int &nVal1=nVal2
(2)CType1 Function(CType2 &var ) 他其实是对函数本身的参数的引用。
也就是对函数原形的参数的引用,简单理解为Functiong(CType2 x)
CType2 &var=x;我是一个打了一年基础的垃圾程序员,呵。。希望我们共同学习。。共同进步。
希望我的讲解能给你带来方便。。
int Function(var)
int var;
{
printf(var);
return 0;
}但在C++中却是错误的,为什么?
printf()这是c 里面的。。不是 vc++里面的。。所以不支持。。
但是。。在vc++中是可以实现的。。
在c中这个程序用到了一个头文件。。
你只需要把他的名字+上.c包含在你的vc++的头文件里就可以了。
记得要声明std::函数名
原因是VC6不允许这样定义函数:
int Function(var)
int var;
{
...;
}
VC6要求将int var;放入{ }中:
int Function(var)
{
int var;
...;
}
因此,以前的C程序不能移植到VC6中了。
VC6要求 不用语句int var;但参数表中要求有说明符int,:
int Function(int var)
{
...;
}