int *const p 与 const int *p
2017-05-06 00:04
211 查看
学过C/C++的同学肯定都有过那么一段被这几个东西整的晕头昏脑的时候,下面我们先看看一道题目:
问下面哪些操作会被编译器禁止:
来修改变量的值,但可以通过a = 10;这样的方法直接修改a的值。
const后面是int *d, *d是什么?a吧,就是指针d所指向的内容呀,这个内容用了一个const来限定
就是说这个内容是不可变的,所以d是一个常量指针。
再看:
const后面是e,所以e是不可变的,即指针的指向不可变,e就是个指针常量了。
相信你理解了这个以后再遇到int const * const f = &a;这样玩出花儿来的定义也不会怕了,仔细
分析一下就可以想清楚了。
int a = 248, b = 4; int const c = 21; const int *d = &a; int *const e = &b; int const * const f = &a;
问下面哪些操作会被编译器禁止:
选项A:*c = 32;
显然错误,c是int型变量,不是指针。选项B:*d = 43;
错误。这里d被声明为常量指针(pointer to const),指针变量指向的值不能变,即不能通过指针来修改变量的值,但可以通过a = 10;这样的方法直接修改a的值。
选项C:e = &a;
错误。e是一个指针常量(const pointer),即其指向不能改变,故错误。选项D: f = 0x321f;
错误。这里的f既是指针常量又是常量指针,即其指向与所指向的值均是不可变的,故错误。选项E:d = &b;
正确。d是常量指针,指向的内容不能变但指向可变。选项F:*e = 34;
正确。e是指针常量,指向不能变但指向的内容可变。是不是又有点晕了?那我就放大招了
要区别指针常量与常量指针只需要看const后面接的是什么就行了
比如对于const int *d = &a;
const后面是int *d, *d是什么?a吧,就是指针d所指向的内容呀,这个内容用了一个const来限定
就是说这个内容是不可变的,所以d是一个常量指针。
再看:
int *const e = &b;
const后面是e,所以e是不可变的,即指针的指向不可变,e就是个指针常量了。
相信你理解了这个以后再遇到int const * const f = &a;这样玩出花儿来的定义也不会怕了,仔细
分析一下就可以想清楚了。
相关文章推荐
- vs2008 Unicode编码CString转换为const char* 、int、void * 、LPWSTR
- C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)
- undefined reference to cv::imread(cv::String const&, int)
- (const int *p)、(int const *p)、(int *const p)、(const int *const p)的区别
- 关于const int* a和int* const a区别的记忆技巧
- const int *p与int * const p的区别
- const int * 与int const * 与int * const的区别
- build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)'
- C语言中const int * 和 int * const
- typedef int Myfunc(const char*, const struct stat *, int)问题的思考
- 【指针常量】const int* p
- error C2664: “int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [15]”转换为“LPTSTR”
- lwip学习杂记之int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);
- const int * p,与int const *p,int * const p区别
- const int* p 表达的是什么意思
- 数字转换成字符串,int 转换成const char*
- const int *p,const * int p,int const *p
- 从const int *p、int* const p到this指针的const属性分析
- const int & 和 int 的区别
- cocos2d int, float, double, const char* 转string