杂货铺

杂货铺中囤杂货

👉 所有文章
技术 理解 HTML 中的 pre 标签 使用 prismjs 代码高亮库 理解 sitemap.xml 解决 Intellij IDEA 右下角不显示 git 分支的问题 并发与并行的区别 ASCII码对照表 理解字符编码、Unicode、UTF-8、UTF-16 认证与鉴权的区别
工具 DBeaver: 跨平台的数据库管理工具 Snipaste: 一个非常好用的截图、贴图工具 常见的网页版流程图、UML建模工具 实用 Chrome 谷歌浏览器插件 低多边形图片生成工具 一些好用的 Markdown 编辑器 Windows 下好用的软件 使用 Genymotion 模拟 Android 环境 实用工具整理 实用网站整理 calibre - 电子书管理软件
其他 试用Atom编辑器 解决谷歌索引404网页的问题 解决论文编译后没有参考文献 思维导图,认清自己,制定目标 想法若干——关于地图 man2:一个快速查找命令使用示例的工具 浅入浅出CouchDB:CouchDB安装 浅入浅出CouchDB:使用curl管理CouchDB 如何修改自己在github中的项目 对c++指向数组指针的一些理解 升级wordpress出现错误:Request exceeded the limit of 10 internal redirects The spirit of softwares 方法链 一些不错的网站 苹果的swift 如何现代化院系的网站 事前、事中、事后 关于选择的一些思考 重要紧急矩阵 二八定律 真相 如何在电脑上使用微信读书 ? 如何关闭微信读书的「看一看」? 从零开始Docker化Ghost博客系统 ghost博客添加多说评论 以生产模式运行Ghost博客系统 Ghost博客主题制作简明教程 将Ghost打造成一个本地APP 重置Ghost博客中的用户密码 在Ubuntu中安装Ghost博客系统 为Ghost博客添加标签云
已迁移 【已迁移】故事: 2020 【已迁移】故事: 2019-nCoV 肺炎

对c++指向数组指针的一些理解


2013-10-15

感谢antou的投稿。

代码:

#include<iostream>
#include<conio.h>
using namespace std;
void main()
{
    int a[20]={1,2,3};
    int (*b)[20]=&a;
    int *c=a;
    cout<<a<<" "<<" "<<&a<<" "<<*&a<<endl;
    cout<<a<<" "<<b<<" "<<*b<<endl;
    cout<<*(*b+1)<<" "<<*(&a+1);
    _getch();
}

为了理解上面的代码,我们先复习一下&*符号的区别,&指的是取地址,而*指的是获取相应地址内存放的内容。对这个程序可以这样理解,这个程序实例中a其实相当于一个指向元素个数为20的int数组首地址的指针,而&a是该指针自身的地址,所以它相当于这里的b,相当于一个二维数组的指针,每一维有20个int元素。见如下框图:

另外,若定义int *b=a,则虽然这的b和上面讲到的b所指地址相同,但它们的实质是不一样的。

但是,又不能完全这么理解,若在程序中加入如下的输出代码:

cout<<a<<" "<<" "<<&a<<" "<<*&a<<endl;
cout<<a<<" "<<b<<" "<<*b<<endl;

会发现输出b*b输出的其实是一个东西,且都是数组a的首地址,那么按照上面的框图理解的话就会出现b所指的指针指向该指针自身的情况,这就说明在其中一定有更底层的东西尚待理解。因此,这样的框图只能用来理解*(*b+1)**(b+1)两者的区别了。


( 本文完 )

文章目录