本人在学C语言指针,代码想要实现两个数从大到小输出,但是为什么实现不了?利用指针交换地址
#include
void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}
void main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d %d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
swap(pointer_1,pointer_2);
printf("%d %d\n",*pointer_1,*pointer_2);
}
你这是没弄清楚指针,指针就是一个地址,相当于你家的门牌号一样,只是一个标识数据存放位置的地方, 所以你要用指针指向的数据的时候应该是*p1而不是直接用p1,p1只是你家的门牌号而不是你家~( ̄▽ ̄~)~
通过指针交换地址需要用指针的指针,用指针交换值使用指针。
#include <stdio.h>
void swap(int **p1,int **p2)
{
int *temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
void main()
{
int a,b;
int *pointer_1,*pointer_2;
scanf("%d %d",&a,&b);
pointer_1=&a;
pointer_2=&b;
if(a<b)
swap(&pointer_1,&pointer_2);
printf("%d %d\n",*pointer_1,*pointer_2);
}
当传参时候又开辟了两个指针内存,这样调换的话main函数的int *pointer_1,*pointer_2的两个变量值没有改变
传参的时候复制了一份,并不会改变实参的状况
传参的时候复制了一份,不会改变实参的状况。
#include
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(void)
{
int x = 5, y = 2;
swap(&x, &y);
printf("交换顺序后: x = %d, y = %d\n", x, y);
return 0;
}
#include <stdio.h>
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(void)
{
int x = 5, y = 2;
swap(&x, &y);
printf("交换顺序后: x = %d, y = %d\n", x, y);
return 0;
}
#include
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(void)
{
int x = 5, y = 2;
swap(&x, &y);
printf("交换顺序后: x = %d, y = %d\n", x, y);
return 0;
}
int temp
temp = *p1
*p1=*p2
*p2=temp分号自己加
#include
void swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(void)
{
int x = 5, y = 2;
swap(&x, &y);
printf("交换顺序后: x = %d, y = %d\n", x, y);
return 0;
}
由于寝室要断网了 , 暂时就不详细解答了。抱歉