C语言中,这两道题有区别吗?分别是对的还是错的?为什么?

2025-03-09 10:59:11
推荐回答(2个)
回答1:

两个都是错的。

3、指针变量传递的是地址的数值,所以还是值传递方式;
5、因为指针变量传递的是地址的数值,所以这个地址里面的数值被操作后,不会被销毁,但函数做的仍然是数值操作。
3是明显的错,5是给一句真话,让了解的不太深的人以为后面的结论也是真的。

回答2:

第三个是错的,就算以指针为参数,如果你传入的是一个指针,那也是相当于传入指针的拷贝,相当于按值传递。比如
#include
int quan=100;
void change(int * p)//指针参数
{
p=quan;
}
int main()
{ int a=9;
int *pi=&a;

change(pi);//以指针作为变量,传入的是指针p的一份拷贝,相当于指针pi的值传递给函数中的p,而p与pi都是指向变量的,在函数中修改了p,而并没有修改pi。

printf("%d\n",*p);//所以输出仍然是9
return 0;
}
第五个也是错的吧,说的很混乱,返回函数中处理的数据,这个不假,什么叫此时函数传递。
还是以上面函数为例
int change(int * p)//指针参数,返回int类型
{
p=quan;

return *p;
}
在main中要定义参数接受返回值,是按值传递的 int f=change(p);
int * change(int * p)//指针参数,返回int指针类型
{
p=quan;

return p;
}
在main中还是要定义参数接受返回值,也是按值传递的 int *f=change(p);