文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>简明C++教程(2) ---新的语法现象(引用)

简明C++教程(2) ---新的语法现象(引用)

时间:2010-04-01  来源:bluedrum

Andrew Huang [email protected]

  1.为什么要引用 C++中大量使用引用,为什么会出现引用这一语法现象?   这要先从C的两种参数传递说起。一种是传值。假设要做一个交换函数,大家都知道如下代码是没办法实现这一目的的。因为这里用了传值,值只能做单向传递来用。  

int swap01(int a,int b)
{
  int tmp =a;
  a = b;
  b = tmp;
}


在C语言里面一般用传地址来处理。下面代码可以实现交换功能。

 

#define PRINT_INT(e) printf("%s=%d\n",#e,e)

int swap02(int * a,int * b)
{
  int tmp =*a;
  //char * c = (char *)a;
  //*c = 0x2f; 
  *a = *b;
  *b = tmp;
}

void test1()
{
   int a = 10,b = 30;
    //swap01(a,b);
    swap02(&a,&b);
    PRINT_INT(a);
    PRINT_INT(b);
}


用传地址的话,有几个缺点,一是书写上多了很多*,二个是指针可以任意移动,象把注释里的char * c = (char *)a ;*c=0x2f;被打开a的值会被部分破坏。

因此C++引入一种新的语法-----------引用.

2.引用格式

   C++引用格式是  类型 & 引用变量名 ,如 int & a;这种写法不会与取变量地址 int *b =&a; 和位与 a & b混淆.

  引用是什么?相当于一个安全指针,有指针双向传递功能,传递高效率的优点。又象普通变量一样书写。并且在语法上能有效防止指针常见被误用的几个错误。因此C++大量使用引用。以下就是一个引用版的交换函数,可以看到书写几乎跟swap01一致,但是值能交换过来

#define PRINT_INT(e) printf("%s=%d\n",#e,e)

int swap03(int &a ,int &b)
{
 int tmp =a;
  a = b;
  b = tmp;
}
void test1()
{
   int a = 10,b = 30;
    swap03(a,b);
    PRINT_INT(a);
    PRINT_INT(b);
}


3.引用为什么防止误用?

  3.1 引用初始化只能通过赋给一个现成变量进行
     int & a = b; 
     这样防止空指针和非法地址。因为在引用定义里,以下两种是
     被禁止的。
     int &d ;
     int &e = 100;

 3.2 定义后,对引用的只能进行赋值。不能移动地址,或换成新的变量引用。
    不能移动地址,这样防住在指针内部移动。
    int &a = b;  a++;//这样相当于给b的空间值+1
    也能在运算中改变引用的对象的地址。
   
    int &f = a;
   
    f = b; //这样仍然是赋值。
    //用指针就会有如下风险。
    int *f = &a;
    f = &b;

 

因此引用在很多面向对象的开发语言使用,象JAVA的传参默认全部采用引用。

 


 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载