cpp中关于'&'和'*'运算符总结
2012-08-23 13:34
190 查看
1.’&’运算符
int a = 5 ; int *p = &a; |
1. &只是用来获取一个变量的地址,返回的是一个常量地址;
2. 因此“&变量”不能被赋值。
下面代码即是错误的:
int a = 5 ; int b = 10 ; int *p = &b ; &a = p; //“&a”不能被赋值。 |
2.’*’运算符
int *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; |
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; } |
相关文章推荐
- 总结C++中三种关于"new"的使用方法
- 对js运算符“||”和“&&”的总结
- JS中运算符“||”和“&&”的总结
- 关于C++中操作符重载的疑问 :四个运算符=, ->, [], ()不可以重载为全局函数(友员函数)
- 关于SVM参数c&g选取的总结帖[matlab-libsvm]
- 关于>?和<?运算符
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- 关于Redux的一些总结(一):Action & 中间件 & 异步
- 说说&和&& |和||的区别 及关于位操作符的使用和总结
- 关于取地址运算符&以及指针的问题
- 对js运算符“||”和“&&”的总结
- 关于VB中的运算符'/'和'/'
- 关于C++中各种运算符的总结和简要介绍
- java中关于%求余运算符的总结
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结
- 关于&运算符
- 关于引用及取地址&运算符的用法
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结