C语言--对数组地址的解析
在C编程中,我们进程会用到数组,这看起来很简单,因为,数组就是存储相同类型元素的集合嘛,不过,当你还没考虑到数组的地址问题时,一切都是简单的,如果你接触了数组中的地址概念,也许你会改变你的想法。
下面,我列出几个例子,看看这些例子输出的会是什么:
首先给出数组的定义:int a[10];
1. cout<<a<<endl;
2. cout<<&a<<endl;
3. cout<<a +1<<endl;
4. cout<<&a +1<<endl;
是不是有点迷惑了?
好吧,现在,我来一一解释这些东西:
1.cout<<a<<endl;
当我们定义了一个数组时,我们给数组起了一个名字,叫做“a”,那么a指代的就是系统给我们分配的那一块内存(这个例子中是40个字节),那么自然而然,a代表的就是这块内存的起始地址
2. cout<<&a<<endl;
很明显,这是一个意思,对a进行取地址操作,得到的仍然还是那块内存的起始地址
3. cout<<a + 1<<endl;
这时,我们对起始地址进行加1操作,判断结果是什么,我们需要知道a能存储的是什么类型的数据,对于这个例子,a中存储的整型数据,所以,它指代的是a中第二个元素的地址值,是对于起始地址加4个字节的结果值
4. cout<<&a + 1<<endl;
这个可能是最难理解的一句话,我们在想得到结果之前,还需要看a代表的是什么,a代表的是能存储10个整型变量的一段内存,所以,对&a进行加1操作,得到是下一个能存储10个整型变量的内存的首地址
下面,给出测试的代码和效果截图:
#include <iostream>
using namespace std; int main(void)
{ int a[10]; cout<<a<<endl;
cout<<&a<<endl;
cout<<a + 1<<endl;
cout<<&a + 1<<endl; system("pause");
return 0;
}
看看结果,是不是和我说的一样。
C语言--对数组地址的解析的更多相关文章
- Go语言http包Form解析之坑
最近正在用Go语言做一个项目,今天在用http包读取客户端发过来的POST数据时遇到了一点小麻烦,就下面这段代码,死活读不到数据: { var body []byte nRead, err := r. ...
- 浅谈C语言变量声明的解析
C语言本身提供了一种不甚明确的变量声明方式——基于使用的声明,如int *a,本质上是声明了*a的类型为int,所以得到了a的类型为指向int的指针.对于简单类型,这样声明并不会对代码产生多大的阅读障 ...
- C语言中的声明解析规则——数组,指针与函数
摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...
- 【c语言】使用gumbo解析HTML
之前使用过PHP的Simple HTML DOM简单地解析HTML但PHP终非我所熟悉的语言,虽然我并不对语言抱有绝对的执着= =(什么你不相信,好吧,不管你信不信,反正我是信了= =).虽然可以简单 ...
- 【P4语言学习】Parser解析器
参考文章:王垠:谈谈Parser 簡單介紹 P4 語言(一)- Parser 什么是Parser 传统的parser,一般出现在编译器和编译原理课程中,援引<谈谈Parser>的定义: 首 ...
- C语言里字符串的解析
根据给定的字符串,按照一定规则解析字符串,卡住好几次,这次做个笔记,以供参考 函数名称: strtok 函数原型: char *strtok(char *s1, const char *s ...
- C语言实现的lisp解析器介绍
近期.由于Perl而学习函数式编程, 再进一步学习lisp, 真是一学习就发现自己的渺小. 无意中找到了一个很easy的C语言版的, lisp解析器. 代码非常短, 却非常见功底, 涨姿势了. 附带还 ...
- C语言实现的minixml解析库入门教程
minixml的中文说明手册:MiniXML中文文档.dochttp://wenku.baidu.com/view/25fd7d7f31b765ce050814f7.html xml源代码: < ...
- 轻量级C语言实现的minixml解析库入门教程
svn上的minixml源码下载. svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个 ...
随机推荐
- javascript基础之for循环
1.数组定义声名 var arry = [1,2,3,4,5] //相当与var arry = Array(1,2,3,4,5) 2.数据的增删改查 var arry = [1,2,3,4,5] ...
- 分享内容到微博、QQ空间、人人网、开心网等社区
网上有不少分享内容到微博.QQ空间.人人网.开心网等社区的插件,但它们都有自己固定的样式,你不一定会喜欢. 或许你想保持你的网站的原状,添加上微博.QQ空间.人人网.开心网的LOGO图片,点击之后就可 ...
- C++拾遗(十二)C++代码重用
“has-a”关系 通常有两种方法实现: 1.被包含,本身是另一个类的对象. 2.私有或者保护继承. 主要讨论第二种方法,在继承时使用private关键字(或者不用任何关键字,默认就是私有的). 使用 ...
- web页面相关的一些常见可用字符介绍
首先是一张图片,是一张一些字符以及想对应的HTML实体表示的对照图片.如下: 一.引号模样或内心的些字符 请选择该表格要呈现的字体: 字符以及HTML实体 描述以及说明 " " 这 ...
- VS Code 项目编译
编译运行vs code源码 如果我们想本地运行 vs code 需要安装一些必要的库. 我们需要安装 'Node.JS' . 这里需要注意的是,最低版本要求是'5.1.0'. 还需要安装 'Pytho ...
- nginx_笔记分享_配置篇
参考http://www.howtocn.org/nginx:directiveindexhttp://blog.s135.com/ nginx 配置文档为 nginx.conf 比如我的配置文档 / ...
- php empty和isset的区别
通过一个例子来解释一下, $id = 0 empty($id) 的值是true isset($id) 也是true. empty 和isset 处理对象无外乎 未定义常量 .0 .空字符串 如果变量 ...
- C# .NET 使用第三方类库DotNetZip解压/压缩Zip rar文件
DotNetZip on CodePlex: http://dotnetzip.codeplex.com/ 详细的可以看源代码……总之感觉比SharpZipLib好用.而且DotNetZip支持VB, ...
- IIS开启伪静态后html静态页面无法访问的解决方法
IIS开启伪静态后,发现原本存在的html静态页面无法访问了,显示的404错误.网上查了下,是因为实现伪静态就是使用 URLRewriter 来映射后缀,会把asp等动态页面映射成html,但是原来存 ...
- WebSQL实例记录
<table id="content"> </table> <br> <input type="button" id= ...