[C++] C++指针的那些事 -- 常量,变量,指针及指针相关的三个数值
2011-12-16 14:08
288 查看
常量: 只有数据, 虽然也占用存储空间, 但在编译后的代码中只引用数据,没有地址的概念.如:
const string hi = "hello";
const int days = 31;
变量: 存储在内存里的数据(右值), 修改时需要引用地址(左值). 如:
int num = 12;
float d = 354.333F;
bool b = true;
而指针则要关注3个数值: 存储指针变量的内存地址, 指针指向的内存地址, 指针指向的值.
若定义一个指针变量:
int num = 8;
int p*= #
则这三个数值则分别表示为: &p, p, *p.
如下示例:
弄明白这三者的关系与区别, 就可以很清楚的理解指针了.
特别提示: 定义指针时最好赋值先NULL, 而释放指针时(delete) 则最好也赋值 NULL, 这样就可以避免一些错误的指针动作.
const string hi = "hello";
const int days = 31;
变量: 存储在内存里的数据(右值), 修改时需要引用地址(左值). 如:
int num = 12;
float d = 354.333F;
bool b = true;
而指针则要关注3个数值: 存储指针变量的内存地址, 指针指向的内存地址, 指针指向的值.
若定义一个指针变量:
int num = 8;
int p*= #
则这三个数值则分别表示为: &p, p, *p.
如下示例:
int main() { int *p=NULL; cout<<"初始化后未赋值:"<<endl; cout<<"指针变量地址(&p) = "<<&p<<endl; cout<<"指针指向的地址(p) = "<<p<<endl; if (p!=NULL) cout<<"指针指向地址存储的值(*p) = "<<*p<<endl; else cout<<"空指针, 不能取值."<<endl; p= new int(1024); cout<<"赋值后:"<<endl; cout<<"指针变量地址(&p) = "<<&p<<endl; cout<<"指针指向的地址(p) = "<<p<<endl; if (p!=NULL) cout<<"指针指向地址存储的值(*p) = "<<*p<<endl; else cout<<"空指针, 不能取值."<<endl; delete p; p = NULL; cout<<"释放后:"<<endl; cout<<"指针变量地址(&p) = "<<&p<<endl; cout<<"指针指向的地址(p) = "<<p<<endl; if (p!=NULL) cout<<"指针指向地址存储的值(*p) = "<<*p<<endl; else cout<<"空指针, 不能取值."<<endl; return 0; }
弄明白这三者的关系与区别, 就可以很清楚的理解指针了.
特别提示: 定义指针时最好赋值先NULL, 而释放指针时(delete) 则最好也赋值 NULL, 这样就可以避免一些错误的指针动作.
相关文章推荐
- c++指向常量的指针和指向变量的指针常量
- 我的C++学习日记——关于const数值变量,指针和引用的理解
- android studio2.3.3 模拟器 Jni函数调用C++对象,lldb调试this指针和相关变量显示无效的原因
- C++二维数组,指针常量与常量指针、常量参数传递、常量变量存储地址
- C/C++语法知识精华整理(1)-左值与右值、变量与常量、 define与const、Printf特点、补码与阶码、位运算等
- C++系列之基本数据类型、常量、变量、const、引用、typedef、枚举、类类型、编写自己的头文件
- C++成员变量指针和成员函数指针
- C++ 虚指针、成员变量与类对象的偏移地址
- C/C++定义全局变量/常量几种方法的区别
- C++成员变量指针和成员函数指针
- C++内存管理及指针相关
- C++变量和常量
- 全局变量用常量初始化----C和C++的不同
- 常量、指针和变量的实现机制
- [Boolan] C++第一周(创建一个不带指针成员变量的类)[注意事项]
- C++指向结构体变量的指针
- C++ 常量指针或者常量引用作为函数参数传递的原因
- 从汇编看c++中指向成员变量的指针(二)
- C/C++定义全局变量/常量几种方法的区别
- C++ 变量及常量