问一个很菜的交换问题

solove394324947 2010-11-02 02:11:34
#include "stdio.h"

void swap(int *p,int *pp)
{
int *t = NULL;
t = p;
p = pp;
pp = t;
}



int main(void)
{
int a=10,b=20;
printf("%d %d",a,b);
printf("\n");
swap(&a,&b);
printf("%d %d",a,b);
return 0;
}

为什么 没有把数交换过来的呢? 我明明交换的是指针的指向,互相改变指针的指向 , 但是值没变 求解
...全文
47 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
try325 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 try325 的回复:]

void swap(int *p,int *pp)
{
int *t = NULL;
t = p;
p = pp;
pp = t;
}
改为
void swap(int *p,int *pp)
{
int t;
t = *p;
*p = *pp;
*pp = *t;
}
[/Quote]
*pp = t;多敲了个*
manytao 2010-11-02
  • 打赏
  • 举报
回复
你只是把地址换了 但实际的值没有换的。

比如说 你现在a的地址是ff00 b的地址是ff02 你形参中的指针变量的地址是指向ff00的ff02

假设t的地址是一个随意地址ffff 你通过交换地址

t=p; // 也就是将p的地址ff00 给了t
p = pp // ff02给了p
pp =t // ff00给了pp

你只是在这三块内存中交换 并没有实际意义上改变 原先 a和y的地址里面所存放的内容。
try325 2010-11-02
  • 打赏
  • 举报
回复
交换是利用指针交换指针指向的内容,楼主交换的是指针本身
luciferisnotsatan 2010-11-02
  • 打赏
  • 举报
回复
void swap(int &p,int &pp)这样就行了,函数里面int t;
调用 swap(a,b)

如果你想改变指针的指向,那就要用void swap(int **p,int **pp)
try325 2010-11-02
  • 打赏
  • 举报
回复
void swap(int *p,int *pp)
{
int *t = NULL;
t = p;
p = pp;
pp = t;
}
改为
void swap(int *p,int *pp)
{
int t;
t = *p;
*p = *pp;
*pp = *t;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧