但是在这个程序中
#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
在c语言中,函数掉用,指针做参数,在函数体内对形参的数据改变会影响到实参吗?
答案:6 悬赏:40 手机版
解决时间 2021-04-14 09:35
- 提问者网友:风月客
- 2021-04-14 00:01
最佳答案
- 五星知识达人网友:長槍戰八方
- 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);
}
函数里面的除了问题,只是修改了两个形参所存的地址,并没有改变形参所存地址所指向的内存区域的值。
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;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯