本用例主要告诉大家指针的简单实用和引用的简单用法,告诉我们在自己写交换数据时需要注意的地方。
本用例在VS2010上测试通过,如需在Linux上测试可以自己去修改。
本用例前两个是错误写法,后两个是正确的写法。
// Point.cpp : 定义控制台应用程序的入口点。
//指针是用来保存地址的变量交换两个变量的值
//用指针实现
#include "stdafx.h"
#include <iostream>
using namespace std;
//这是一种错误的写法,这种写法的错误原因是因为函数在调用结束后会把所有的变量都会
//清理出去,最终没有实现数据的交换。
//函数调用过程中,形参发生了改变,但是实参没有发生变化,这是最典型的传值调用方式
void swap1(int a,int b)
{
int temp=0;
temp=a;
a=b;
b=temp;
}
//在函数调用过程形参发生了交换,但是实参没有发生交换,
//这种方式表面上是传址(实参为地址),
//但是由于函数调用过程中实际上没有针对实参作出任何操作,
// 其本质还是传值调用,故也将其划为传值调用
void swap2(int *a,int *b)
{
int *temp=NULL;
temp=a;
a=b;
b=temp;
}
//这个是实现指针的地址不会变化,但是指针所指向的内容被交换了,实现了数据的交换。
void swap3(int *a,int *b)
{
int temp=0;
temp=*a;
*a=*b;
*b=temp;
}
//通过引用实现数据的交换
void swap4(int &a,int &b)
{
int temp=0;
temp=a;
a=b;
b=temp;
}
void output(int x,int y)
{
std::cout<<"The frist "<<x<<" The second "<<y<<endl;
}
int main()
{
int x=12;
int y=34;
swap1(x,y);
output(x,y);
swap2(&x,&y);
output(x,y);
swap3(&x,&y);
output(x,y);
swap4(x,y);
output(x,y);
return 0;
}