在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语言--对数组地址的解析的更多相关文章

  1. Go语言http包Form解析之坑

    最近正在用Go语言做一个项目,今天在用http包读取客户端发过来的POST数据时遇到了一点小麻烦,就下面这段代码,死活读不到数据: { var body []byte nRead, err := r. ...

  2. 浅谈C语言变量声明的解析

    C语言本身提供了一种不甚明确的变量声明方式——基于使用的声明,如int *a,本质上是声明了*a的类型为int,所以得到了a的类型为指向int的指针.对于简单类型,这样声明并不会对代码产生多大的阅读障 ...

  3. C语言中的声明解析规则——数组,指针与函数

    摘要:C语言的申明存在的最大问题是:你无法以一种人们所习惯的自然方式和从左向右阅读一个声明,在引入voliatile和const关键字以后,情况更加糟糕了.由于这些关键字只能出现在声明中,是的声明形式 ...

  4. 【c语言】使用gumbo解析HTML

    之前使用过PHP的Simple HTML DOM简单地解析HTML但PHP终非我所熟悉的语言,虽然我并不对语言抱有绝对的执着= =(什么你不相信,好吧,不管你信不信,反正我是信了= =).虽然可以简单 ...

  5. 【P4语言学习】Parser解析器

    参考文章:王垠:谈谈Parser 簡單介紹 P4 語言(一)- Parser 什么是Parser 传统的parser,一般出现在编译器和编译原理课程中,援引<谈谈Parser>的定义: 首 ...

  6. C语言里字符串的解析

      根据给定的字符串,按照一定规则解析字符串,卡住好几次,这次做个笔记,以供参考 函数名称:   strtok 函数原型:   char *strtok(char *s1, const char *s ...

  7. C语言实现的lisp解析器介绍

    近期.由于Perl而学习函数式编程, 再进一步学习lisp, 真是一学习就发现自己的渺小. 无意中找到了一个很easy的C语言版的, lisp解析器. 代码非常短, 却非常见功底, 涨姿势了. 附带还 ...

  8. C语言实现的minixml解析库入门教程

    minixml的中文说明手册:MiniXML中文文档.dochttp://wenku.baidu.com/view/25fd7d7f31b765ce050814f7.html xml源代码: < ...

  9. 轻量级C语言实现的minixml解析库入门教程

    svn上的minixml源码下载.  svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个 ...

随机推荐

  1. Java多线程——线程池

    系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互.在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池类似 ...

  2. C#中yield用法

    yield 关键字向编译器指示它所在的方法是迭代器块.编译器生成一个类来实现迭代器块中表示的行为.在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值.这是一个返回值, ...

  3. 单篇文章JS模拟分页

    废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请 ...

  4. repeater 结合checkbox批量删除

    项目中用到这个,从网上搜了搜相关内容,代码如下 <script type="text/javascript"> function checkAllThis(obj) { ...

  5. view ondraw

    窗口发生重绘时会被应用程序的窗口框架给调用 要使输出的东西始终能在窗口中看到 就可以使用该函数  窗口从到有的时候就会产生WM_PAINT消息,让窗口发生重绘 这是程序就会执行到ONDRAW函数处 所 ...

  6. 利用js得到某个范围内的整数随机数

    Math.random()方法可以返回(0,1)之间的随机数,不包括0和1. 套用公式:Math.floor(Math.random()*可能的值的总数+第一个可能的值) 如得到(3,9]之间的随机数 ...

  7. 快速入门cocos2d-x jsbinding

    如果你是一个cocos2d-x的老手,那你可以忽略这篇博文,如果你是一个接触过javascript,想通过HTML5做游戏的,但是苦于不知道如何下手,那么这篇博文可能会帮到你. cocos2dx-js ...

  8. JQUERY1.9学习笔记 之基本过滤器(四) 首元素选择器

    首元素选择器:jQuery( ":first" ) <!DOCTYPE html><html lang="zh-cn"><head ...

  9. PHP获取指定年份指定月份的天数

    最近写接口的时候突然发现的非常实用的php函数,在这儿分享一下: cal_days_in_month(calender,$month,$year): calender:历法,常量,如CAL_GREGO ...

  10. 操作css样式

    <script type="text/javascript"> //产生一个四位的验证码. function createCode(){ var datas = ['A ...