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 是什么意思? 展开
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 是什么意思? 展开
3个回答
展开全部
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=*(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++中才有。
展开全部
这段题目肯定是C++程序的代码,因为当中出现引用操作符(&)。
操作符*和&在函数参数或类型定义中和在一般程序语句中含义是不同的。
操作符 函数参数/类型定义 一般程序语句
* 指针 取指针所指的数据
& 引用 取变量的地址
由于&d出现在函数参数中,即指变量d的引用。
当调用fun(a,*b),对应函数定义为fun(int *s, int &d),
实参到形参的赋值过程为
a->*s
*b->&d
解释:
数组名a赋值给指针变量s(这是合法的,数组名在内存中也表现为一个指针),
指针b的所指的数据(*b)赋值给变量d的引用,即给(*b)据取一个别名,当d的值发生变化时,(*b)相应发生变化。
操作符*和&在函数参数或类型定义中和在一般程序语句中含义是不同的。
操作符 函数参数/类型定义 一般程序语句
* 指针 取指针所指的数据
& 引用 取变量的地址
由于&d出现在函数参数中,即指变量d的引用。
当调用fun(a,*b),对应函数定义为fun(int *s, int &d),
实参到形参的赋值过程为
a->*s
*b->&d
解释:
数组名a赋值给指针变量s(这是合法的,数组名在内存中也表现为一个指针),
指针b的所指的数据(*b)赋值给变量d的引用,即给(*b)据取一个别名,当d的值发生变化时,(*b)相应发生变化。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你总有编译器吧,复制进去试下就知道了。
int &d 是传递个值 给变量d的地址,也就是改变d的地址,应该不能这么写吧。
int &d 是传递个值 给变量d的地址,也就是改变d的地址,应该不能这么写吧。
追问
能试出答案,但不知道为啥
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询