永发信息网

在c语言中,函数掉用,指针做参数,在函数体内对形参的数据改变会影响到实参吗?

答案:6  悬赏:40  手机版
解决时间 2021-04-14 09:35
  • 提问者网友:风月客
  • 2021-04-14 00:01
但是在这个程序中
#include<stdio.h>
int *f(int *s,int *t)
{
int *k;
if(*s<*t)
{
k=s;
s=t;
t=k;
}
return s;
}
main()
{
int i=3,j=5,*p=&i,*q=&j,*r;
r=f(p,q);
printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);
}

为什么答案是3,5,3,5,5
不是5,3,5,3,5
但是在下面的这个程序中它又是怎么一回事呀?
#include<stdio.h>
int k=7,m=5;
void f(int **s)
{
int *t=&k;
s=&t;
*s=&m;
printf("%d,%d,%d,",k,*t,**s);
}
main()
{
int i=3,*p=&i,**r=&p;
f(r);
printf("%d,%d,%d\n",i,*p,**r);
}
结果为7,5,5,3,3,3
最佳答案
  • 五星知识达人网友:長槍戰八方
  • 2021-04-14 00:13
#include<stdio.h>
int *f(int *s,int *t)
{
int k;
if(*s<*t)
{
k=*s;
*s=*t;
*t=k;
}
return s;
}
main()
{
int i=3,j=5,*p=&i,*q=&j,*r;
r=f(p, q);
printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);
}
函数里面的除了问题,只是修改了两个形参所存的地址,并没有改变形参所存地址所指向的内存区域的值。
全部回答
  • 1楼网友:玩世
  • 2021-04-14 05:47
应该不会吧,改变的是副本。你写个代码测试下就行了。(错了告诉我下)
  • 2楼网友:北方的南先生
  • 2021-04-14 04:09
会的,因为多个指针可以指向一个地址,形参改变地址中的内容,实参也会改变,因为调用时你将形参的地址指向实参了。
  • 3楼网友:酒者煙囻
  • 2021-04-14 02:58
不变。调用函数时,形参只是一个局部变量,赋值时调用实参的数据而已。 但是特别情况是,如果你在函数内部使用了指针型的变量,就会复杂一些。 如果只是普通的调用,不会影响。 你可以看看局部变量与全局变量的说明
  • 4楼网友:等灯
  • 2021-04-14 02:36
指针做参数,形参改变实参的值是会变的。指针在一定意义上可以理解为地址,给指针赋值就相当于把特定地址上的值改变了。
  • 5楼网友:人间朝暮
  • 2021-04-14 00:58
不会改变实参的值,如果要改变,需要调用地址,即把 1 2 3 4 5 6 7 int*k;  if(*s<*t)  {   k=s;   s=t;   t=k;  }  改为 1 2 3 4 5 6 7 intk; if(*s<*t) {     k=*s;     *s=*t;     *t=k; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯