C/C++指针常量和常量指针
来源:互联网 发布:淘宝店宝贝描述 编辑:程序博客网 时间:2024/04/19 11:32
常量指针
常量指针是指向常量的指针,指针指向的内存地址的内容是不可修改的。
常量指针定义“const int p = &a;” p 告诉编译器是常量,不能将*p作为左值进行操作。但这里的指针p还是一个变量,它的内容存放常量的地址,所以先声明常量指针再初始化是允许的,指针也是允许修改的,例如:
提示:注意常量指针,定义的时候const 在 int * 的前面,符合语句的顺序。
int a =0,b=1;const int *p; //声明常量指针p = &a; //p指向ap = &b; //指针p可以修改,指向b*p = 2; //不允许,指针所指向的内容是常量,不可修改。
指针常量
指针常量是指针的常量,它是不可改变地址的指针,但是可以对它所指向的内容进行修改。
指针常量的定义:“int *const p = &a;” 它告诉编译器,p是常量,不能作为左值进行操作,但是允许修改其指向的内容,既是*p是可以修改的。指针常量必须在声明的同时对其进行初始化,不允许先声明一个指针常量随后再对其赋值,这和声明一般的常量是一样的,例如;
int a=0,b=1;int *const p1 =&a; //声明的同时要赋值int *const p2; //不允许p2 = &b; //不允许,p2是常量不允许作为左值*p2 = 2; //允许修改*p2的内容
如果指针作为函数参数,当我们不想被调用函数随意修改参数指针而只是想修改参数指针指向的内容时,我们常把指针常量作为参数。
例如:
有两个整形变量a,b,我们写个函数用于交换a,b的值,利用指针作为形参,函数修改参数指针的值是我们不希望的,这时可将参数设为指针常量,如果函数对指针修改编译是将报错。
void Exchange(int *const a,int *const b){ int temp; temp=*a; *a=*b; *b=temp}
事实上,如果函数不修改参数本身的值,我们一般对参数加上const限定,这也是提高代码质量的一个小技巧,在类的方法中,如果方法不修改类属性的值,我们也常将方法加上const。
综合测试:
#include <iostream>using namespace std;void swap(int *const p1, int *const p2){ int tmp=0; tmp = *p2; *p2 = *p1; *p1 = tmp;}void main(){ // c /C++中的常量指针和指针常量 int i =5; const int *p; p = &i; cout<<*p<<endl; i=10; cout<<*p<<endl; int *const p1 = &i; cout<<*p1<<endl; i = 100; cout<<*p1<<endl; int a =2,b=3; cout <<"a="<<a <<" b=" <<b<<endl; swap(&a,&b); cout <<"a="<<a <<" b=" <<b<<endl; return;}
测试结果:
0 0
- 指针和常量 c
- C++-指针常量和常量指针
- C指针常量和常量指针
- C/C++指针常量和常量指针
- C/C++ 指针常量和常量指针
- C/C++——常量指针和指针常量
- C语言中的常量指针和指针常量
- C 指针常量和常量指针实例解析
- C语言:指向常量的指针 和 指针常量
- 【C++】由指针常量和常量指针引发的问题
- C指向常量的指针和指针常量
- C/C++常量指针和指针常量的区别
- C/C++中的常量指针和指针常量
- c++,常量指针和指针常量的区别
- C/C++ 指向常量的指针和常量指针
- C常量指针 与指针常量区别
- C常量指针 与指针常量区别
- C/C++ 常量指针,指针常量
- 模板的写法,写一个titleBar
- Tree
- 三层交换机连接路由器
- 自定义UIAlertView可以容纳多个按钮
- 架构师---名称介绍
- C/C++指针常量和常量指针
- Comet HTTP服务器推送框架之icomet
- Android控制自身应用设置实现多语言
- BZOJ 1191 超级英雄hero(二分图匹配,匈牙利算法)
- MySQL字符编码:如何从utf8升级到utf8mb4
- 关于远程调用实现的必要技术
- Java 加解密技术系列之 MD5
- Servlet3.0 服务端推技术实例
- android handler理解+使用方法