c,c++易错点之指针与引用
2014-05-21 14:28
190 查看
1、指针与引用的区别
(1)非空区别在任何情况下都不能使用引用指向空值引用必须指向某些对象
如:int &reiv ;就是错误的,因为声明了一个引用,但是引用为空,没有进行初始化,所以出错,应改为: int iv ; int &reiv = iv;
(2) 合法性区别,指针使用前需要检测其合法性
(3) 可修改区别,指针可以重赋值 ,引用在初始化之后就不能够在改变
(4) 应用区别,
使用指针的情况:一是存在不指向任何对象的可能,二是在不同时刻需要指向不同对象
2、this指针的特点
(1) this指针只能在成员函数中使用,全局函数,静态函数都不能使用this指针,实际上,成员函数默认第一个参数是 T*const this;如:class A{public :int func(int p){}}; 其中func的原型在编译器看来是:int func(A const * this,int p);
(2) this指针在成员函数的开始前构造,在成员函数结束后消除
3、动态内存问题
3.1#include<iostream> using namespace std; char *GetMemory(void){ char p[] = "hello world"; return p; } int main(){ char *str ; str = GetMemory(); cout<<str; return 0; }上面的结果可能是乱码也可能是正常输出,单不是“hello world”。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原来的内容已经被清除,新内容不可知。
如果将上面代码改为
#include<iostream> using namespace std; char *GetMemory(void){ char *pp = "hello world"; cout<<&pp<<endl; return pp; } int main(){ char *str ; str = GetMemory(); cout<<&str<<endl; cout<<str; return 0; }此时输出的结果为“hello world”。
4、通过引用或者指针修改原来的值
#include<iostream> using namespace std; void change(int *a ,int &b ,int c){ c = 1; b = 3; *a = 2; } int main(){ int a = 1,b = 2 ,c = 3 ; change(&a,b,c); cout<<a<<b<<c; return 0; }输出的结果是:2,3,3
5、迷途指针
迷途指针也叫悬浮指针、失控指针,是对一个指针进行delete操作后,这样会释放他所指向的内存,但并没有把它设置为空时产生的。而后,如果你没有重新赋值(即从新给一个地址)就试图再次使用该指针,引起的结果是不可预测的。通常我们使用将 p = 0:将迷途指针改为空指针。相关文章推荐
- C++中引用与指针的比较
- [语法比较][指针/引用]Lava和C/C++语法比较
- java中的引用和C++中的指针的区别
- C++中的临时对象,对临时对象的引用,和临时对象的指针
- C++中的临时对象,对临时对象的引用,和临时对象的指针
- C++中指针(pointer)和引用(reference)的区别和联系
- 引用与指针.C++
- C++引用与指针的比较
- C++引用与指针的比较
- More Effective C++:指针与引用的区别
- c++的中的指向类的指针和引用的比较
- C++学习体会--变量,指针,引用
- C++指针和引用(摘录)
- C++指针与引用【转贴】
- C++引用与指针的比较
- More Effective C++:指针与引用的区别
- C++点滴:向函数中传递指针和传递指针的引用的区别:
- c++中指针,指针的引用,指针的指针的区别
- C++中指针和引用的区别
- C++引用与指针的比较