主要是C++库函数中有一个std::swap函数,所以你这出现了一点小问题。。
当然可能还有一个原因,你用的是VC60吧
-----------------------------------------------
以上代码完全不变在VS2010中没有错误,在VC60中就是没有交换
----------------------------------------------
#include<iostream>
using namespace std;
void swap(int &,int &);
int main()
{
int i=3,j=50;
swap(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b+1; //为与std::swap区分
b=temp;
}
--------------------
运行上面这个代码,在什么编译器里都是对的(当然结果是i=51 j=3)
------------------
VC60好像不支持函数内的函数声明,最后放在main函数外肯定没问题,。。
--------------------
#include<iostream>
using namespace std;
//void swap(int &,int &);
int main()
{
int i=3,j=50;
swap(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b+1;
b=temp;
}
---------------------
使用这段代码,swap实际调用的是库函数std::swap
所以结果是i=50 j=3
------------------------------
好吧,其实刚才我又测试了一下,我估计不错的话又是VC60的问题了。。
看如下代码
#include<iostream>
using namespace std;
int main()
{
int i=3,j=50;
void sw(int &,int &);
sw(i,j);
cout<<"i="<<i<<" "<<"j="<<j<<endl;
return 0;
}
void sw(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
------------
这个也是无论哪个编译器都是对的。。
但是去掉void sw(int &,int &);就编译出错。明显函数没有声明,间接也说明了刚才第二个调用的std::swap
----------------
这里还说明一个问题,VC60的问题不是在函数内部能否声明函数(的确,好像都可以,刚才说错了),而是在于VC60重载swap后的调用机制与其他编译器的不同。
最后说一句,不要再写这种具有二义性的代码了,最好规范一下,可以把谭浩强的书给pass掉了,。看看可以,全当纠错还是可以的。。
#include<stdioh>
void swap(int pa,int pb);
int main()
{
int a=10,b=20;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
void swap(int pa,int pb)
{int t;
t=pa,pa=pb,pb=t;
}
之前不能交换,是因为交换的是形参,而不是实参,实参&a和&b的值没有改变
您好,Oppo的内存扩展是Swap,它是一种虚拟内存技术,可以将物理内存和硬盘上的一部分空间用于模拟内存,以提高系统的内存容量。它可以把内存中的一部分数据和程序暂时存储到硬盘上,以减少内存的使用量,从而腾出更多的内存空间,以满足系统的需求。Oppo的最小内存扩展要求是200字节,最大内存扩展要求是500字节,以满足系统的最佳性能。
以上就是关于谭浩强C++书中的程序,为什么运行老是不对全部的内容,包括:谭浩强C++书中的程序,为什么运行老是不对、改正程序中的错误,并说明swap不能实现两数交换的原因正确的程序输出: a=20,b=10(c语言)、oppo的内存扩展是swap等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)