指针中,关键字const放在不同的位置表示的意义:

1、const int *p;

这种情况下,表示的是一个指向常量的指针,程序中不能通过指针来改变它所指向的值,但是指针本身的值可以改变,即指针可以指向其他的数据。就好像她,她就像冷血动物,她是那么的无情,不论我是多么的爱她,为她做多少的改变,又或者其他人对她的关心,她都没有感觉,她只顾她自己,或许我是该去寻找生命中的另外一个,结束这无尽的痛苦。

2、int * const p;

这种情况下,声明一个指针常量(也称常指针)。指针本身的值不可变,即它不能再指向其他数据,但它所指向的数据的值可以改变。就好像我,我的心里只有她,一直都不会改变,你只要问我最爱的人是谁,一定是她。可是她的心我不懂,我不明白她的心里到底有没有我,还是到底她的心在想些什么,就算有一天,她离我而去,她的心里装着别人,我还是一样傻傻的坚持着。

3、const int * const p;

这种情况声明一个指向常量的指针常量,指针本身的值不可改变,它所指向的数据的值也不能通过指针改变。就好像我们曾经的誓言,我的心里只有她,她的心里只有我,我们不离不弃,相濡以沫,天荒地老,海枯石烂,永不分离。

理解数组指针

#include<iostream.h>
void main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int i=1,j=1;
int (*p)[3];
p=a;
int x = *(p[i]+j);
int y = *(p+i)[j];
cout<<x<<" "<<y<<endl;
}

x=5;y=7;

因为p是一个指向包含3个元素的以为数组的指针,p=p[0]=&a[0]=&{1,4,7}; p[i]=p[1]=&a[1]=&{2,5,7}; p[i]+j=p[1]+1=&5;

p=a[],a[][]=p[];方括号的优先级大于*号,所以y其实质是a[],而x实质是a[][];y=*(p+i+j)=*(p+2)=7;

理解指针数组

#include<iostream.h>
void main()
{
int a[5]={1,2,3,4,5};
int (*pa)[5]=&a;
cout<<"*pa[0]= "<<*pa[0]<<endl;
cout<<"*(pa[0]+1)= "<<*(pa[0]+1)<<endl;
cout<<"*(pa[1])= "<<*(pa[1])<<endl;
char *pb[5]={"abc","def","123","456","789"};
cout<<"pb[0]= "<<pb[0]<<endl;
cout<<"pb[1]= "<<pb[1]<<endl;
}

*pa[0]= 1
*(pa[0]+1)= 2
*(pa[1])= 2367460
pb[0]= abc
pb[1]= def

这里因为int (*pa)[5] : pa是一个指向 int[5]的一个数组指针

*(pa[1])=*(*(pa+1));相当于把这个指针指的位置移动了一格。

pa指向的是一个数组,把数组整体当做一个元素来看,当指针的值改变的时候,那么所指向的值也肯定不是原来的这个数组了

int (*pa)[5]=&a;

如果是普通的指针,则初始化赋值的时候是赋值的这个数组中的第一个元素,

a是代表这个数组的起始位置的地址,比如a[0]

而数组指针初始化赋值需要赋的是整个数组在内存中的位置,&a是代表整个数组在内存中的位置,就把整个数组当做一个整体来看

const指针、数组指针、指针数组理解相关推荐

  1. 深入理解C指针之四:指针和数组

    深入理解C指针之四:指针和数组 原文:深入理解C指针之四:指针和数组 数组是C内建的基本数据结构,数组表示法和指针表示法紧密关联.一种常见的错误认识是数组和指针完全可以互换,尽管数组名字有时可以当做指 ...

  2. C++阶段01笔记07【指针(基本概念、变量定义和使用、内存空间、空指针和野指针、const修饰指针、指针和数组、指针和函数)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 7 指针 7.1 指针的基本概念 7.2 指针变量的定义和使用 示例 7.3 指针所占内存空间 示例 7.4 空指针和野指针 示 ...

  3. C语言-指针-基础用法、运算、指针与数组、指针数组、多级指针、void指针和const修饰符-学习笔记08

    文章目录 1. 地址和变量 2. 指针 2.1 基本声明 2.2 指针的目标 3. 指针的运算 3.1 指针的赋值运算 3.2 指针的算术运算 3.2.1 指针与常量的加法与减法 3.2.2 两指针相 ...

  4. C++阶段01笔记08【结构体(基本概念、定义与使用、数组、指针、嵌套、const使用)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 8 结构体 8.1 结构体基本概念 8.2 结构体定义和使用 示例 8.3 结构体数组 示例 8.4 结构体指针 示例 8.5 ...

  5. 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)

    文章目录 一.指针与函数之间的关系 二.复制传参 三.地址传参 四.传一维数组(地址) 五.传二维数组(地址) 六.传指针数组(地址) 七.指针函数和函数指针 一.指针与函数之间的关系 1.我们可以给 ...

  6. C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和a 的区别

    1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...

  7. c/c++教程 - 1.9 指针 空指针 野指针 const修饰指针 指针常量 常量指针 指针和数组 指针和函数

    十一.指针 (1)指针的定义和使用 指针的作用:可以通过指针间接访问内存. 参考视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&a ...

  8. 指向数组的指针的理解

    指向数组的指针的理解 开发工具与关键技术:Visual Studio.C++ 作者:张国军 撰写时间:2019年05月03日 数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值. ...

  9. 深入理解指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针

    指针数组 表达式为:int *p[5] 理解:下标运算符[ ]的优先级是要高于指针运算符*,因此p先和下标运算符结合,决定了p首先是个数组,其类型int *,表明数组的元素都是都是指针.而数组占多少个 ...

  10. 黑马程序员匠心之作|C++教程从0到1入门编程(60 指针-const修饰指针61 指针-指针和数组62 指针-指针和函数63 指针-指针配合数组和函数的案例)

    黑马程序员匠心之作|C++教程从0到1入门编程(60 指针-const修饰指针61 指针-指针和数组62 指针-指针和函数63 指针-指针配合数组和函数的案例) 一.60 指针-const修饰指针 二 ...

最新文章

  1. Spring Remoting: HTTP Invoker--转
  2. DL之AF:机器学习/深度学习中常用的激活函数(sigmoid、softmax等)简介、应用、计算图实现、代码实现详细攻略
  3. 使用script命令自动录屏用户操作
  4. MapReduce概述
  5. 运营一个网站,新增加一个功能,容易忽视哪些问题就匆匆上线?
  6. 478. Generate Random Point in a Circle | 478. 在圆内随机生成点(Java)
  7. 算法图解:如何用两个栈实现一个队列?
  8. 探索性测试 之 极速测试
  9. html5中关于input使用方法的改变
  10. 联想笔记本电脑安装完Ubuntu16.04出现搜索不到wifi的问题
  11. 华为交换机初始化_华为交换机启动配置命令详解大全
  12. sparksql处理mysql_Spark记录-SparkSQL远程操作MySQL和ORACLE
  13. 八达岭长城 景区 导游图 、地图、大图、高清、超高清
  14. gcc用-O0优化无问题,-O3优化时程序崩溃的问题
  15. 中国-省-市三级地图及世界地图在线编辑可视化工具上线
  16. 这些道理不懂,你注定就是穷打工的命!
  17. 【时间与空间】极移矩阵
  18. Scrapy爬虫框架的第一个实例(完整详细!)
  19. ON/安森美FCH041N65F车规级MOS管,原厂渠道ASEMI代理
  20. DNS主从域名解析服务器

热门文章

  1. ~ 按位取反运算解析
  2. MacBook Air移动硬盘分区
  3. IDEA,git单个指定文件分支间合并
  4. 【树上算法】树的直径
  5. json和ajax的使用
  6. Android 自定义seekbar【仿微信联系人】
  7. Centos 7iso百度网盘下载
  8. 转载 在心底举行的默哀仪式
  9. Android移动开发——Java基础
  10. 科研新手该如何找到合适的文献?| 开启科研之路(王威教授)