常指针 和 常引用
2015-08-28 21:14
295 查看
笔记const
1.常引用
对常引用来说他一般是对由系统临时分配而无法改变的中间变量起别名如以下程序中的两种情况,而引用则是给一般的变量起别名//引用是给变量起一个别名 #include <iostream> using namespace std; int a = 'a'; int main() { /* 以下语句在内存中是这样干的char temp(系统在栈中临时分配的) = a; char &r_a = temp; */ char const &r_a = a; //用(int *)输出存储在栈中r_a的地址 cout << "r_a: "<< r_a << "\n &r_a: " << (int *)&r_a <<endl; cout << "a: "<< a << "\n &a: " << &a <<endl; int const &r1_a = a + 1; //用(int *)输出存储在栈中r_a的地址注意与上面的区别&r_a = a; cout << "r1_a: "<< r1_a << "\n &r1_a: " << (int *)&r1_a <<endl; return 0; }
2.常指针
这是指针常量#include <iostream> using namespace std; int main() { //指针常量 int a = 10; int * const p_a = &a; //p_a = &a; 注意不能在这儿初始化。 cout << "p_a: "<< p_a << ", *p_a: "<< *p_a << endl; cout << "a: " << a << ", &a: " << &a << endl; *p_a = 1; cout << "*p_a: "<< *p_a << endl; int b = 12; /* p_a = &b; 因为这是一个指针常量, 所以不能乱指,但可以改变其所指内存的值,*p_a = 1; ok的 */ cout<< "p_a: " << p_a << ", *p_a: " << *p_a << endl; cout<< "b: " << b << ", &b: " << &b << endl; }
这是常量指针
#include <iostream> using namespace std; int main() { //常量指针 int a = 10; int const *p_a; p_a = &a; cout << "p_a: "<< p_a << ", *p_a: "<< *p_a << endl; cout << "&a: " << &a << endl; /*p_a = 1; 注意由于此处是常量指针,故而报错, 所以不能改变所指内存的值, 但可以改变他的指向, 如下: */ int b = 12; p_a = &b; //完全没有问题 cout<< "p_a: " << p_a << ", *p_a: " << *p_a << endl; cout<< "b: " << b << ", &b: " << &b << endl; }
总结
int const *p; //常量指针 int *const p = &a; //指针常量得在这儿初始化
其实就是看const修饰谁,修饰*p, *p不能改,为常量指针。修饰p, 为指针常量, p 值不能改。类似的还有函数指针、指针函数、数组指针、指针数组、如下:
int (*p)[3]; //(p先与*结合)为指针变量->指向有三个元素的数组 int *p[3]; //(p先与[]结合)为一个数组:包含着三个指针元素 int (*p)(); //(p先与*结合)为指针变量->指向无参的函数首址 int *p(); //(p先与()结合)为函数名:返回类型为int *
相关文章推荐
- AutoLayout -Masonry
- 分组背包专题小结
- swift详解之十五------------NSThread线程同步锁
- [转载]孙婧妍:高考语文148分是这样炼成的(附:孙婧妍
- [转载]孙婧妍:高考语文148分是这样炼成的(附:孙婧妍
- [转载]孙婧妍:高考语文148分是这样炼成的(附:孙婧妍
- [转载]孙婧妍:高考语文148分是这样炼成的(附:孙婧妍
- [转载]孙婧妍:高考语文148分是这样炼成的(附:孙婧妍
- Java String.split()方法
- hdu2426
- 用户行为模型及常用分析软件总结
- 数组名作为形参时的规则细节+浮点型数据格式符细节
- 可更新视图及其规则
- Android照片墙实现 -- 图片加载,防止OOM的处理办法
- 使用STL的next_permutation函数生成全排列
- robot(2):ROS系统安装
- Node.js进程通信模块child_process
- Codeforces Round #201 (Div. 2)
- poj 3261
- HDU--1712(分组背包)