cpp中关于'&'和'*'运算符总结


1.’&’运算符

int a = 5 ;

int *p = &a;

上面的代码“定义一个变量a,取得a的地址赋给指针p”,这是一个读取操作符,即用来读取变量的地址;表明:

1.      &只是用来获取一个变量的地址,返回的是一个常量地址;

2.      因此“&变量”不能被赋值。

下面代码即是错误的:

int a = 5 ;

int b = 10 ;

int *p = &b ;

&a = p;        //“&a”不能被赋值。

 

2.’*’运算符

int *p;

上面的代码“定义一个指针变量p,且该指针变量指向一个整型的变量”;这句话表明:

1.      p是一个变量,表示地址;

2.      *p也是一个变量,表示指向的变量;

#include "stdafx.h"

#include <iostream.h>

 

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

{

         int a = 1 ;

         int b = 2;

 

         int *p = &a;

         cout<<"变量a地址:"<<p<<endl;

         cout<<"指针p指向的变量:"<<*p<<endl;

         cout<<endl;

 

         *p = 3; //指针p指向的变量可以改变

         cout<<"指针p指向的变量改变后:"<<*p<<endl;

         cout<<endl;

 

         p = &b; //指针p可以改变

         cout<<"变量b地址:"<<p<<endl;

         cout<<"指针p指向的变量:"<<*p<<endl;

         cout<<endl;

 

         return 0;

}


注意:

定义时int *p = &a;允许存在,等价于:

int a = 5 ;

int *p;

p = &a;

其他地方不能出现*p = &a;类型不匹配

 

3.两者比较

下面的代码表明:

1.      定义时’*变量’、’&变量’只是起标记作用,指明后面的变量表示的含义,整体代表什么由后面的变量决定;即定义时’*变量’—>指针;’&变量’---->引用;

2.      使用时则’*变量’—>指针指向的变量;’&变量’---->变量所在的地址;

3.      引用的简要介绍(定义时使用&)

定义引用步骤:想要定义的数据类型,然后跟上引用运算符“&”,再跟上引用的名字(任何合法的变量名)。

其格式:类型  &变量名;

  

例如:  int i=2;

           int &j=i;       //创建了一个整型引用

i和j是指向同一内存空间,j相当于i的别名。

注意:声明j是对整型的引用,初始化为引用i。在这里,要求i必须已经有声明或定义,而引用仅仅是它的别名,不能喧宾夺主。

 

①定义引用时,必须立即对它进行初始化,不能定义完成后再赋值。

如:int i=5;

      int &j;     //错误 !

      j=i;

为引用提供的初始值,可以是一个变量或另一个引用。

例如:

int i=5;

int &j1=i;

int &j2=j1;   //j1和j2都是i的别名。

 

②引用不可以重新赋值,不可使其作为另一个变量的别名。引用一旦初始化,它就维系在一定的目标上,再也不分开。任何对该引用的赋值,都是对引用所维系的目标的赋值。

 


#include "stdafx.h"

#include <iostream.h>

 

void set1(int *p)

{

         cout<<"指针p指向的地址:"<<p<<endl;

         cout<<"指针p指向的变量:"<<*p<<endl;

         cout<<endl;

}

 

void set2(int &p)

{

         cout<<"p指向的地址:"<<&p<<endl;

         cout<<"p代表的变量:"<<p<<endl;

         cout<<endl;

}

 

void set3(int p)

{

         cout<<"p指向的地址:"<<&p<<endl;

         cout<<"p代表的变量:"<<p<<endl;

         cout<<endl;

}

 

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

{

         int a = 1 ;

         int b = 2;

 

         set1(&a);

 

         set2(b);

 

         set3(b);

 

         return 0;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值