在单片机程序设计中,我们经常会用到const这个关键字,在有些单片机的编译器中可能会是code(比如51系列单片机),但我们在学习C语言的时候,首先还是先学到的const。我们知道,const关键字的含义是"常量的,常数的,不变的"意思。我们最初学到的是cont int a = 5;或者const unsigned char array[5] = {0,1,2,3,4};我们把a、array[n]称之为常值变量。我们在单片机编程中可能不会经常用到const int a = 5这种语句。但我们会经常用到const unsigned int array[5]这种方式。因为我们都知道,我们要把大数组定义到const所指向的存储空间中,在单片机里我姑且把这片空间称为ROM空间。既然是ROM空间,那肯定就是只读空间了,因为单片机的RAM空间少得可怜。我们知道,C语言最伟大的地方,就是设计了指针,指针可以指向任何地方。在初学指针的时候,老师就教我们int *p;p是一个指向int类型的指针变量,如果我们定义了int a = 8; 如果p = &a;那么我把*p = 10;变量a的值也跟着变成10。原因我们都知道,因为P指向了a,p里存放的是a的地址,而*号的意思是取值(内容),*p变了,a当然会变了。在对const 、指针有了初步的了解后,我们就可以理解const int *p了,当然也有写成int const *p的,其实都是一样的。怎么理解呢?我这里也是跟别人学到的,说是,要看const修饰的谁,比如前面的const int a,const修饰的是 a,所以a是一个常值变量,只会在程序初始化时赋值一次,以后不管怎么搞都不会变化的。对于const int *p,const 修饰的是  *p,我们知道,P是指向int类型的指针变量,*p是指向的变量的内容(值),加上const修饰后,是不是可以理解*p是一个常值呢,所以说,是指向常值变量,换句话说是一个指向ROM空间的指针变量。我们在定义const int *p;这种变量的时候,就是为了指向ROM空间,指向一个存常值的空间。这里有些用词可能不太专业,准确。但这里需要注意,对于ROM空间,不是说只能通过定义const int*p;去访问。这里只是向读者说明,const int *p;是一个指向ROM空间的指针变量

理解了const int *p;我们再来理解一下,int * const p,还是根据前面的模式去理解,const 修饰的是p,而p是一个指针,所以,int * const p,定义的p是一个指针常量,这个指什是固定的,只在初始化的时候赋给它一次,以后就不能乱指了。不像const int*p,P是可变的。

这里通过两个实例来说一下,两者的区别:

 int a = ;
const int *p = &a;
*p = ; //这段程序的编译是错误的,会提示: attempt to modify object qualified const int a = ;
int b = ;
const int *p;
p = &a;
*p //*p输出的是10
p = &b;
*p //*p输出的是20 int a;
int b;
int *const p = &a;
p = &b; //这里会编译出错

const int *p;int *const p;区别及用法的更多相关文章

  1. const int * p 和 int const * p 和 int * const p 的区别

    首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * ...

  2. const int * pi/int * const pi的区别

    前面有一篇文章:数组名就是常量指针 参考文章:http://blog.pfan.cn/whyhappy/5164.html const int * pi .int const * pi与int *   ...

  3. const int *p,int *const p区别(转)

    1)先从const int i说起.使用const修饰的i我们称之为符号常量.即,i不能在其他地方被重新赋值了.注意:const int i与int const i是等价的,相同的,即const与in ...

  4. int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针

    恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); in ...

  5. c语言检测文件是否存在int __cdecl access(const char *, int);

    最近写代码,遇到很多地方需要判断文件是否存在的.网上的方法也是千奇百怪,“百家争鸣”. fopen方式打开的比较多见,也有其他各种方式判断文件是否存在的,由于其他方法与本文无关,所以不打算提及. 笔者 ...

  6. 对于这个函数const int func(const int& a) const声明中,三个const分别是什么意思?

    第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值 ...

  7. 【转】int const A::func()和int A::func() const

    int const A::func() { return 0; }int A::func() const { return 0; } 上面的代码是合法的,其中A::func成员函数[只能在成员函数后面 ...

  8. C/C++中的const int*和int * const

    代码: #include <iostream> using namespace std; int main(){ const int *p; ; p = &a; a = ; cou ...

  9. const vector<int> 和 vector<const int>问题讨论

    1.const vector <int> vec(10) —— 与const int a[10]是一回事,意思是vec只有10个元素,不能增加了,里面的元素也是不能变化的 vector&l ...

随机推荐

  1. 【java爬虫】---爬虫+基于接口的网络爬虫

    爬虫+基于接口的网络爬虫 上一篇讲了[java爬虫]---爬虫+jsoup轻松爬博客,该方式有个很大的局限性,就是你通过jsoup爬虫只适合爬静态网页,所以只能爬当前页面的所有新闻.如果需要爬一个网站 ...

  2. 【从零开始自制CPU之学习篇01】识别四色环电阻

    制作CPU的好多部分都用到了各种阻值的电阻,由于我选购的是色环电阻,即电阻表面涂上一定颜色的色环,来代表这个电阻的阻值.因此通过色环来快速识别电阻阻值需要作为储备知识,不然一堆电阻插在面包板上很快就乱 ...

  3. qcharts编译

    编译环境vs2013+qt5.5.1+perl5 qchart源码在git上自己下载,或者在此下载,参考文档:Qt Charts 5.7.0 安装教程,这篇文章是使用mingw的方式编译qcharts ...

  4. Android 9.0/P http 网络请求的问题

    Google表示,为保证用户数据和设备的安全,针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的 ...

  5. 通过Python、BeautifulSoup爬取Gitee热门开源项目

    一.安装 1.通过requests 对响应内容进行处理,requests.get()方法会返回一个Response对象 pip install requests 2.beautifulSoup对网页解 ...

  6. Chapter 5 Blood Type——9

    He grimaced. 他扮了一个鬼脸. "Or better," I continued, the pent-up annoyance flowing freely now, ...

  7. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  8. Docker Compose 引用环境变量

    在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景.本文集中介绍 docker compose 引用环境变量的方式.说明:本文的演示环境为 ubu ...

  9. 记一次vue长列表的内存性能分析和优化

    好久没写东西,博客又长草了,这段时间身心放松了好久,都没什么主题可以写了 上周接到一个需求,优化vue的一个长列表页面,忙活了很久也到尾声了,内存使用和卡顿都做了一点点优化,还算有点收获 写的有点啰嗦 ...

  10. EF操作数据库的步骤和一些简单操作语句

    这里是写给我自己做记录的,不会写成一篇很好的博客,也不会置顶,如果有朋友看到了,而且觉得里面的内容不咋的,希望见谅哈! 关于这部分内容,这里推荐一篇总结的非常好的博客,如果你点击进来了,那么请略过下面 ...