引用和指针的比较与函数传值、地址、引用的详解

/*

**test21.cpp : Defines the entry point for the console application.

**系统winXP SP3 32位.

**引用和指针的比较与函数传值、地址、引用的详解

*/

#include "stdafx.h"

#include "iostream.h"


void add_f1(int fiNum){

fiNum += 1;

}


void add_f2(int* fiNum){

fiNum += 1;

}


void add_f3(int* fiNum){

*fiNum += 1;

}


void add_f4(int& fiNum){

fiNum += 1;

}


int main(int argc, char* argv[])

{

int iNum1 = 1, iNum2 = 2;

cout<<"before iNum1 = "<

cout<<"before iNum2 = "<


int& rNum = iNum1;

rNum = iNum2;

cout<<"after iNum1 = "<

cout<<"after iNum2 = "<

cout<<"after rNum = "<


rNum = 0;

cout<<"after iNum1 = "<

cout<<"after iNum2 = "<

cout<<"after rNum = "<


int fiNum1 = 0;

add_f1(fiNum1);

cout<<"fiNum1 = "<


int fiNum2 = 0;

add_f2(&fiNum2);

cout<<"fiNum2 = "<


int fiNum3 = 0;

add_f3(&fiNum3);

cout<<"fiNum3 = "<


int fiNum4 = 0;

add_f4(fiNum4);

cout<<"fiNum4 = "<


return 0;

}

Tips1:引用“&”并不是简单的取地址的意思,比如int m = 0;int& n = m;这里n相当于m的别名,对n的操作也会同样的发生在m上。

Tips2:引用创建之初就要赋值,即引用到一个具体的变量上,这里食欲指针是不同的,指针在定义的时候不需要初始化,可在后续重新赋值。

Tips3:不存在NULL的引用,所有的引用都必须指向一个固定的内存空间,而指针是存在空指针的。

Tips4:引用的创建于销毁并不会调用拷贝函数与析构函数,所以很多时候使用引用会大大增加程序的运行效率,比如在函数返回值上。

你可能感兴趣的:(引用和指针的比较与函数传值、地址、引用的详解)