1. 用普通,指针和引用三种方法实现传递参数,他们的区别是什么,他们的特点是什么?

 我来答
icecoobe
2011-12-02 · TA获得超过1989个赞
知道小有建树答主
回答量:1058
采纳率:100%
帮助的人:1108万
展开全部
先来个概括~~~
C语言中,所有的函数调用传参,都是传递的一个值!不一样的是,我们能利用这个值做什么!

1. 普通传参
比如 int test(int a),此处,传递一个int型数据a,我们获得的是一个int型的值,比如5,仅仅只是一个int

数值,获取不了传参时那个变量的地址!比如
int a = 5;
int *p = &a; // 【1】 &a
test(a);在test函数中,无法获取a这个变量的地址,就是【1】,仅仅得到了5这个值

2. 指针传递
int test(int *p);
此处传递的是,一个整形变量的内存地址,其实也是一个int数值,内存地址使用int型变量保存,比如0x77777,

就是一个int数值。
int a = 5;
int *p = &a; // 【2】 假设为0x77777
test( p );
此时,我们在test函数中,就可以根据p保存的地址0x77777来修改这个内存单元中的值,就达到了修改a的目的



3. 引用传递
int a = 5;
int &b = a; // a的引用
这个其实类似第2种方法,也是传递了地址,b相当于给a取了一个别名。
谭浩强书中所指的值传递和引用传递其实都是值传递,那样写书确实误导新手。。。。

11: int a = 5;
00401578 mov dword ptr [ebp-4],5 ; 将5写入a那个int内存单元

12: int &b = a;
0040157F lea eax,[ebp-4] ; 获取a的地址
00401582 mov dword ptr [ebp-8],eax ; 【3】 此处类似【2】中,定义一个指针指向a的内存单元
redstone100
2011-12-02 · TA获得超过159个赞
知道小有建树答主
回答量:245
采纳率:100%
帮助的人:94.4万
展开全部
用实例讲解:
#include<iostream>
using namespace std;
void rank(int a,int b,int c) //普通传值,无法改变实参的值。传入的参数是实参的副本
{ //随着调用函数的销毁而消失。所以传入三个数无法实现排序
int x;
if(b>c)
{x=c;c=b;b=x;}
if(a>b)
{x=b;b=a;a=x;}
if(b>c)
{x=c;c=b;b=x;}
}
int main()
{
int a,b,c;
cout<<"请输入三个整数"<<endl;
cin>>a>>b>>c;
rank(a,b,c);
cout<<a<<'\t'<<b<<'\t'<<c<<endl;
return 0;
}

#include<iostream>
using namespace std;
void rank(int &a,int &b,int &c) //引用传值,实际传入的是实参的地址,函数销毁后实参
{ //的值会随之改变。指针传值与此类似。
int x;
if(b>c)
{x=c;c=b;b=x;}
if(a>b)
{x=b;b=a;a=x;}
if(b>c)
{x=c;c=b;b=x;}
}
int main()
{
int a,b,c;
cout<<"请输入三个整数"<<endl;
cin>>a>>b>>c;
rank(a,b,c);
cout<<a<<'\t'<<b<<'\t'<<c<<endl;
return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>
using namespace std;
void rank(int *a,int *b,int *c)//指针
{
int x;
if(b>c)
{x=c;c=b;b=x;}
if(a>b)
{x=b;b=a;a=x;}
if(b>c)
{x=c;c=b;b=x;}
}
int main()
{
int a,b,c;
cout<<"请输入三个整数"<<endl;
cin>>a>>b>>c;
rank(&a,&b,&c); //调用方式也要是传递地址(&:取地址符)
cout<<a<<'\t'<<b<<'\t'<<c<<endl;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式