首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求大神解释啊 总觉得老师说的有有关问题.

2013-11-29 
求大神解释啊 总觉得老师说的有问题......................#include iostreamusing namespace stdint m

求大神解释啊 总觉得老师说的有问题......................
#include <iostream>
using namespace std;
int main()
{int *p1,*p2,a=3,b=4;
  p1=&a,p2=&b;
  cout<<&a<<" "<<&b<<endl;
  cout<<a<<" "<<b<<endl;
  swap(*p1,*p2);
  cout<<*p1<<" "<<*p2<<endl;
  cout<<&a<<" "<<&b<<endl;
}
void swap(int *a1,int *a2)
{int *temp;
  temp=a1;
  a1=a2;
  a2=temp;
}

写了一个交换两个变量的小程序用来测试的 问题出在这里
老师说swap函数有问题 应该写成
void swap(int *a1,int *a2)
{int temp;
  temp=*a1;
  *a1=*a2;
  *a2=temp;
}
老师说变量地址不能交换 和赋值,,但是 我上面那个程序运行后 明显swap函数是起作用了的 a,b两个变量的地址是没有改变 对于指针变量*a1和*a2 a1和a2不就是分别存放变量的地址吗 所以我不理解了,求大神给个专业的解释 谢谢

下面是运行截图
求大神解释啊 总觉得老师说的有有关问题.


[解决办法]
void swap(int *a1,int *a2)
 {int *temp;
   temp=a1;
   a1=a2;
   a2=temp;
 }
 a1和a2是按值传递的形参,修改a1和a2本身不会对a和b产生任何影响,要修改a1和a2指向的内存才能交换
[解决办法]
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

#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

热点排行