c语言的一道题

、已知有如下程序:voidmain(){inta[5]={1,2,3,4,5},*b;b=(int*)malloc(sizeof(int));____;printf("%... 、已知有如下程序:
void main()
{
int a[5]={1,2,3,4,5},*b;
b=(int*)malloc(sizeof(int));
____;
printf("%d\n",*b);
}
要使程序输出为a[2]的值,则下列有关函数fun的定义和下划线处对应的fun调用语句正确的有( )。

【答  案】CD
【分  数】2分
【选  项】

 A、void fun(int*s,int*d)
{*d=*(s+2);}
调用: fun(a,&b)
 B、void fun(int*s,int&d)
{d=*(s+2);}
调用: fun(a,b)
 C、void fun(int*s,int &d)
{d=*(s+2);}
调用: fun(a,*b)
 D、void fun(int*s,int **d)
{**d=*(s+2);}
调用: fun(a,&b)
怎么做,另外 void fun(int*s,int &d)中 int &d 是什么意思?
展开
 我来答
记住一座城
2012-10-13 · TA获得超过728个赞
知道小有建树答主
回答量:1091
采纳率:33%
帮助的人:665万
展开全部
A、void fun(int*s,int*d)//d是指针,调用时传入的却是指向指针的指针。
{*d=*(s+2);}
调用: fun(a,&b)
 B、void fun(int*s,int&d)//d是对整型变量的引用,但调用时实参传入的却是指针。
{d=*(s+2);} //左边是一个指针,右边是一个整型变量,赋值错误。
调用: fun(a,b)
 C、void fun(int*s,int &d) //d是对整形变量的引用,参数传递是传址
{d=*(s+2);}
调用: fun(a,*b)
 D、void fun(int*s,int **d)//函数调用和参数都是匹配的。
{**d=*(s+2);}
调用: fun(a,&b)
更多追问追答
追问
还是不懂。。&d    都是int &d  B项是对指针的引用,C项为什么是对整型变量的引用 ?
追答
刚才打错了,现在改过来了。
c语言中没有引用,c++中才有。
vegetablemoon
2012-10-13
知道答主
回答量:13
采纳率:0%
帮助的人:4.5万
展开全部
这段题目肯定是C++程序的代码,因为当中出现引用操作符(&)。
操作符*和&在函数参数或类型定义中和在一般程序语句中含义是不同的。
操作符 函数参数/类型定义 一般程序语句
* 指针 取指针所指的数据
& 引用 取变量的地址
由于&d出现在函数参数中,即指变量d的引用。
当调用fun(a,*b),对应函数定义为fun(int *s, int &d),
实参到形参的赋值过程为
a->*s
*b->&d
解释:
数组名a赋值给指针变量s(这是合法的,数组名在内存中也表现为一个指针),
指针b的所指的数据(*b)赋值给变量d的引用,即给(*b)据取一个别名,当d的值发生变化时,(*b)相应发生变化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
love2008lzk
2012-10-13
知道答主
回答量:23
采纳率:0%
帮助的人:11.2万
展开全部
你总有编译器吧,复制进去试下就知道了。
int &d 是传递个值 给变量d的地址,也就是改变d的地址,应该不能这么写吧。
追问
能试出答案,但不知道为啥
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式