const int * p 和 int const * p 和 int * const p 的区别
来源:互联网 发布:linux安装两个mysql 编辑:程序博客网 时间:2024/06/15 20:52
为什么要引入const
?
const的英语意思是常量
,顾名思义,就是指不能被修改的量,但是它是用来修饰变量
的,因为常量例如1,2,本身就在内存中的常量区,是只读的。所以const限制的是我们自己定义的变量不被自己修改。举个栗子:我们想自定义一个缓冲区的大小为512,而且这个大小是固定的,因此我们就可以这样声明:const int bufsize = 512;
那有没有疑问呢?为什么不用#define
啊?
#define
和const
的区别?
#define
是在预处理的时候处理的,直接将相应的内容用其对应的数值替换。但是const
是在编译的时候处理的。#define
不会为变量分配相应的内存空间,但是const
会,并且const
还可以指明变量的类型,这样非常有助于编译器为我们检查语法错误。
下面我们再看我们最初的问题:
>首先注意,const int *p
和int const *p
是一样的,并且不管是不是*p
,即使const int i
和int const i
也是一样的,所以我们接下来只讨论int const *p
和int * const p
的不同
对于这种问题,我们只用将const 的位置固定,然后再看后面的类型,一般规则是const后面的类型不能在直接进行赋值或者修改.例如下面:
#include<stdio.h>int main(int argc,char *argv[]){ int i = 10; int j = 1; int const *p2 = &i; int *const p3 = &j; p2 = &j; //这句没问题,因为const是对 *p2 进行限制的 *p3 = 20; //这句也没问题,同理,const是对p3进行操作的 *p2 = 30; //这句错了,原因就是已经用const修饰了,不能再次改 p3 = &j; //同上,错误 return 0;}
我们编译下再看下效果:
错误提示:”read-only”,现在有没有对这个问题有理解呢,觉得const怎么样呢?那么我再说一个问题,不知道为什么的问题:
#include<stdio.h>int main(){ const int a = 5; int *p = (int *)&a; *p = 10; printf("a:%d\n",a);}
对,这个结果可是让我吃惊了,为什么呢?欢迎评论交流.
0 0
- const int *p 和 int* const p 的区别详解
- C++ const int* p 和 int * const p的区别
- const int * p 和 int const * p 和 int * const p 的区别
- const int* p和int* const p
- const int* p 和 int* const p
- int const *p 和 const int *p
- int *const p,const int *p和int const *p的区别
- const int *p,int *const p和int const *p的区别
- const int *p,int *const p区别
- const int *p,int *const p区别
- const int *p,int *const p区别
- int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别
- const指针,const int * p, int *const p,int const * p的区别
- const int *p、int *const p、const int* const p的区别
- 题目二:const int *p,const * int p,int const *p的区别还有int const *const p
- (const int *p)、(int const *p)、(int *const p)、(const int *const p)的区别
- const int *p与int *const p的区别
- const int *p与int *const p的区别
- 学习思维
- 程序入口函数与初始化
- easyUI datagrid 跨行跨列操作
- ocp-511
- mac安装MongoDB
- const int * p 和 int const * p 和 int * const p 的区别
- ocp-512
- ocp-513
- 海量数据挖掘MMDS week4: 推荐系统之隐语义模型latent semantic analysis
- 0-1背包问题
- Linux文件权限详解
- ocp-514
- UITextField
- 研究手机直播流媒体框架