当前位置: 代码迷 >> VC >> C与C++调用函数的有关问题
  详细解决方案

C与C++调用函数的有关问题

热度:1448   发布时间:2013-02-25 00:00:00.0
C与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;
  }


如程序所示,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)?
两个疑问,望大家不要鄙视,给我解惑,不胜感激。

------解决方案--------------------------------------------------------
探讨

C语言没有引用类型, 可以用指针类型改写。

char与是不是引用没关系吧?
int &amp;n,int &amp;c 之所以饮用是因为 fun 函数直接return这两个参数中的一个, 并且以引用方式返回。
因此 fun(ch,tn,tc)++ 对 fun的返回值加1, 相当于队fun的return语句后的表达式加1, 也就是 n 或者 c,
而对n 或者 c加1, 相当于对 tn……

------解决方案--------------------------------------------------------
探讨

引用:

C语言没有引用类型, 可以用指针类型改写。

char与是不是引用没关系吧?
int &amp;amp;n,int &amp;amp;c 之所以饮用是因为 fun 函数直接return这两个参数中的一个, 并且以引用方式返回。
因此 fun(ch,tn,tc)++ 对 fun的返回值加1, 相当于队fun的return语句后的表达式加1, 也就是 n 或者……

------解决方案--------------------------------------------------------
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| 评论
  相关解决方案