#include<iostream.h>
int &fun(char,int &,int &);
void main()
{
int tn(0),tc(0);
cout<<"Enter character";
char ch;
cin>>ch;
while(ch!='#')
{
fun(ch,tn,tc)++;
cin>>ch;
}
cout<<"Numter character:"<<tn<<endl;
cout<<"Other character:"<<tc<<endl;
}
int &fun(char cha,int &n,int &c)
{
if(cha>='0'&&cha<='9')
return n;
else
return c;
}
如程序所示,C++在引用函数,引用函数返回的是引用,形参也是引用。
我自然想到C函数问题,因为C中从来没有涉及到一个函数fun(int&,int&)这样的。为什么不能把引用就改成C中调用函数的模样?比如像下面这样:
#include<iostream.h>
int fun(char,int ,int );
void main()
{
int tn(0),tc(0);
cout<<"Enter character";
char ch;
cin>>ch;
while(ch!='#')
{
fun(ch,tn,tc)++;
cin>>ch;
}
cout<<"Numter character:"<<tn<<endl;
cout<<"Other character:"<<tc<<endl;
}
int &fun(char cha,int n,int c)
{
if(cha>='0'&&cha<='9')
return n;
else
return c;
}
还有一个问题,如果这样不可以,那么char也是引用,为什么不是&fun(char &cha,int &n,int &c)?
两个疑问,望大家不要鄙视,给我解惑,不胜感激。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
1.从内存上来讲 系统为指针分配内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内存空间。
2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。
3.所以引用访问对象是直接访问。指针访问对象是间接访问。
4。如果pa是指针,那么*pa就是引用了。
但是两者在作为形参的时候非常相似,区别是指针拷贝副本,引用不拷贝。实例程序如下:
#include<stdio.h>
void pt(int * pta,int * ptb)
{
int *ptc;
ptc=pta;pta=ptb;ptb=ptc;
}
void ref(int &ra,int &rb)
{
int rc;
rc=ra;ra=rb;rb=rc;
}
void main()
{
int a=3;int b=4;
int *pa=&a;int *pb=&b;
pt(pa,pb);
printf("zhizhen: a=%d,b=%d\n",a,b);
ref(a,b);
printf("yinyong: a=%d,b=%d\n",a,b);
}
输出结果如下:
zhizhen: a=3,b=4
yinyong: a=3,b=4
赞同15| 评论