c++交换数值

会打代码的扫地王大爷 2014-03-28 11:27:14
#include<iostream>
using namespace std;
void swap1(int x,int y)
{
int temp=0;
temp=x;
x=y;
y=temp;
}
void swap2(int *x,int *y)
{
int *temp;
*temp=*x;
*x=*y;
*y=*temp;

}
int main()
{
int x=1,y=2;
swap1(x,y);
cout<<"x="<<x<<" y="<<y<<endl;
swap2(&x,&y);
cout<<"x="<<x<<" y="<<y<<endl;
return 0;
}
swap2哪里错了
...全文
211 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ojc520520 2014-04-01
  • 打赏
  • 举报
回复
学习学习。。。。。。
不良制品 2014-03-31
  • 打赏
  • 举报
回复
swap1 也没实现值交换的功能 int x=1,y=2; swap1(x,y); cout<<"x="<<x<<" y="<<y<<endl; // x = 1, y =2 swap2(&x,&y); // 报错,int *temp没用初始化,也没用指向一共地址,不能直接使用 *temp=*x。 这里最简单的是直接int temp,要不自己分配空间并释放。 cout<<"x="<<x<<" y="<<y<<endl;
赵4老师 2014-03-31
  • 打赏
  • 举报
回复
#include <stdio.h>
#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)
char   *p1="1" ,*p2="2" ;
char    c1=1   , c2=2   ;
short   s1=1   , s2=2   ;
int     i1=1   , i2=2   ;
__int64 I1=1i64, I2=2i64;
float   f1=1.0f, f2=2.0f;
double  d1=1.0 , d2=2.0 ;
void main() {
    SWAP((int)p1,(int)p2);                printf("char *     %5s,   %5s\n",p1,p2);
    SWAP(c1,c2);                          printf("char       %5d,   %5d\n",c1,c2);
    SWAP(s1,s2);                          printf("short      %5d,   %5d\n",s1,s2);
    SWAP(i1,i2);                          printf("int        %5d,   %5d\n",i1,i2);
    SWAP(I1,I2);                          printf("__int64 %5I64d,%5I64d\n",I1,I2);
    SWAP(*(int     *)&f1,*(int     *)&f2);printf("float      %5g,   %5g\n",f1,f2);
    SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double    %5lg,  %5lg\n",d1,d2);

    SWAP(c1,c1);
    printf("%d\n",c1);
}
//char *         2,       1
//char           2,       1
//short          2,       1
//int            2,       1
//__int64     2,    1
//float          2,       1
//double        2,      1
//2
yuanmushen 2014-03-31
  • 打赏
  • 举报
回复
void swap2(int *x,int *y) { int *temp; // 没有初始化 *temp=*x; // 将x的值当作temp的值,我怀疑你这个有时运行会出错,因为temp里的地址是个随机值 *x=*y; // 相当于 3 = 3;//不能编译 *y=*temp; // 同上 }
Myxuan326 2014-03-29
  • 打赏
  • 举报
回复
三楼的说得好
IMyxuan 2014-03-29
  • 打赏
  • 举报
回复
楼上说得对,你只是交换了指针的值,但是原来的数据没有发生变化
allenltiverson 2014-03-29
  • 打赏
  • 举报
回复
抛开引用,一切参数都是值传递,只不过传递的值是变量的值,还是变量的地址值
只此冒泡君 2014-03-29
  • 打赏
  • 举报
回复
引用 5 楼 cangyingzhijia 的回复:
int *temp; 这个地方错了
嗯 temp 都沒有初始化!改成
void swap2(int *x, int *y)
{
    int temp;
     temp = *x;
     *x = *y;
     *y = temp;
}
ithiker 2014-03-29
  • 打赏
  • 举报
回复
swap2就是通过传指针改变值的,只不过楼主没有初始化temp指针就直接解引用了

void swap2(int *x,int *y)
{
     int *temp;//temp没有初始化,*temp是无意义的!
     *temp=*x;
     *x=*y;
     *y=*temp;
 
}
//非要这么写 ,就只有向下面这样改改了,当然不建议这样写swap
void swap2(int *x,int *y)
{
    int t;
    int *temp=&t;
    *temp=*x;
    *x=*y;
    *y=*temp;
}

苍蝇①号 2014-03-29
  • 打赏
  • 举报
回复
int *temp; 这个地方错了
f_liu 2014-03-29
  • 打赏
  • 举报
回复
*temp是没有指向,是野指针。。直接用int temp就可以了。。不然会报错
ithiker 2014-03-29
  • 打赏
  • 举报
回复
引用 9 楼 wlmnzf 的回复:
[quote=引用 6 楼 gigglesun 的回复:] swap2就是通过传指针改变值的,只不过楼主没有初始化temp指针就直接解引用了

void swap2(int *x,int *y)
{
     int *temp;//temp没有初始化,*temp是无意义的!
     *temp=*x;
     *x=*y;
     *y=*temp;
 
}
//非要这么写 ,就只有向下面这样改改了,当然不建议这样写swap
void swap2(int *x,int *y)
{
    int t;
    int *temp=&t;
    *temp=*x;
    *x=*y;
    *y=*temp;
}

为什么初始化必须赋予别的变量的地址?我用NULL初始化貌似没用[/quote] 通俗的说:地址为NULL的地方不能存东西,用NULL初始化某个指针是为了保证这个指针不是野指针,不会到处指向;
  • 打赏
  • 举报
回复
引用 6 楼 gigglesun 的回复:
swap2就是通过传指针改变值的,只不过楼主没有初始化temp指针就直接解引用了

void swap2(int *x,int *y)
{
     int *temp;//temp没有初始化,*temp是无意义的!
     *temp=*x;
     *x=*y;
     *y=*temp;
 
}
//非要这么写 ,就只有向下面这样改改了,当然不建议这样写swap
void swap2(int *x,int *y)
{
    int t;
    int *temp=&t;
    *temp=*x;
    *x=*y;
    *y=*temp;
}

为什么初始化必须赋予别的变量的地址?我用NULL初始化貌似没用
zybjtu 2014-03-29
  • 打赏
  • 举报
回复
引用 1 楼 derekrose 的回复:
你交换的是指针的值,然后这个指针的值还是copy by value的 相当于什么也没做
十万八千里远啊
derekrose 2014-03-28
  • 打赏
  • 举报
回复
你交换的是指针的值,然后这个指针的值还是copy by value的 相当于什么也没做

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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