|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include<stdio.h>
- int *f(int *s,int *t)
- {
- int *k;if(*s<*t){
- k=s;s=t;t=k;
- }
- return s;
- }
- int main()
- {
- int i=3,j=5,*p=&i,*q=&j,*r;
- r=f(p,q);
- printf("%d,%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);
- return 0;
- }
复制代码 输出的结果是 3,5,3,5,3,5
但是。。。。。
- #include<stdio.h>
- int *f(int *s,int *t)
- {
- int *k;if(*s<*t){
- k=*s;*s=*t;*t=k;
- }
- return s;
- }
- int main()
- {
- int i=3,j=5,*p=&i,*q=&j,*r;
- r=f(p,q);
- printf("%d,%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);
- return 0;
- }
复制代码 这个的输出结果是5,3,5,3,5,3
求各位大佬能用通俗易懂的知识讲解一下这是为什么?感谢大佬
2楼正解,但楼主您明不明白??
您对函数的理解还不够清晰。如果是传值给函数,那么对函数而言,接收到的是一份副本。运算完后,把结果返回,所以对您手头上正本的资料是没有作用的。因此,您执行对调之后,却没有真正的对调。这是实参与形参的不同之处。
先不要管局部变量,或者最好不要管局部还是全局变量。就连 main() 里面的都是局部变量!吸收不了就先不要管~
如果是传址(指针),那是直接作用在正本上的。内存中的地址是独一无二的不能拷贝呀。
代码一:
(k = s) >> k == &i ; (s=t) >> &i == &j ; (t = k) >> &j == k == &i
输出结果应该是 3, 5, 3, 5, 5
您的 printf 多了一个 %d
您这个是互换地址。资料在内存中的地址被对调了,但相对应的资料还是一样的
代码二:
k = i , i = j , j = k == i
这个操作才是把值给对调
@无符号整形 << 好像弹不了
第二个没问题吧。只要没有访问 k 就可以了
|
|