c语言swap指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言swap指针相关的知识,希望对你有一定的参考价值。

int a=5,b=10
.........
swap(a,&b)
printf(....,a,b)
void swap(int x。 int y)
int t
t=x
x=*y
*y=t

请问a,b输出是多少

#include<stdio.h>
void swap(int x,int* y)


int t; 
t=x;
x=*y;
*y=t;

int main()

int a=5,b=10;
swap(a,&b);
printf("%d,%d\\n",a,b);
return 0;

swap函数第一个是值传递,第二个传递的是指针,值传递为单项传递,相当于运行swap时,又创建了一个内存存放a的数值,但是指针传递不创建新的内存,所以都是5

追问

最后算出x=10,*y=5,怎么a不等于10?

追答

不是给你说了么,swap第一个参数为值传递,值传递是单向传递,a传递给x的时候,x是新创建的内存,和a的内存不一样,虽然x的值为10,但是没有给a传递,所以a还是5,但是第二个参数是指针,共享一段内存,即y和b是一段内存,y变化时,b也会变化

追问

是调用函数,没有返回语句,a的值才不变吧

追答

这怎么跟返回值有关系。。。。。。。。。。。。你把

void swap(int x,int* y)
 

    int t; 
    t=x;
    x=*y;
    *y=t;

改成

void swap(int *x,int* y)
 

    int t; 
    t=*x;
    *x=*y;
    *y=t;

调用的时候用swap(&a,&b)输出就是10和5了

参考技术A 呵呵,很多错误,首先会编译报错。

swap函数交换 指针

1.
#include<stdio.h> #include<stdlib.h> void swap(int *p,int *q)//建立swap函数,定义两个指针,并把两个指针的地址交换 { int x=*p; *p=*q; *q=x; return; } main() { int m,n;//定义两个变量 printf("请输入两个数,m,n\\n");//输入两个数 scanf("%d,%d",&m,&n); swap(&m,&n);//交换 printf("%d,%d\\n",m,n);//输出 system("pause"); }

2.程序是错误的,*m的地址是随机的,没有确定值,所以不可

 

3.

程序没有错误却无法交换,因为之前都是指针,最后交换的时候却是整型,两个指针的地址没有交换,所以不能。

4.

#include<stdio.h>
#include<stdlib.h> 
int comp(int *p,int *q) 
{
if(*p>*q)
return *p;
else
return *q;
}
main()
{
int m,n,*a,*b;
scanf("%d,%d",&m,&n); 
a=&m;
b=&n;
printf("max=%d\\n",comp(a,b)); 
system("pause");
}

 

总结

最开始看到问题我还是很懵,但是通过查找资料和看别人的理解慢慢搞明白了,也许说的不太清楚但我自己已经知道是什么意思了,有很多次错误,最后一个程序调试过很多次,还是不熟练,要多加练习。

 

以上是关于c语言swap指针的主要内容,如果未能解决你的问题,请参考以下文章

在c语言中整形变量的指针能否赋值给整形变量?

关于C 语言中swap的问题

关于C语言指针的问题,希望高手帮忙解答一下

C语言:指针实现交换两个变量的值

c语言中,指针p的+1或-1,可不可以理解为指针在地址上的前进或后退?

C语言的泛型编程