设有一个二维数组a,它有3行4列。它的定义为
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,18,21,23}};
a是一个数组名。a数组包含3行,即3个元 素:a[0],a[1],a[2]。而每一元素又是一个一维数组, 它包含4个元素(即4个列元素),例如,a[0]所 代表的一维数组又包含4个元素: a[0][0], a[0][1], a[0][2], a[0][3],可以认为二维数组是 “数组的数组”,即数组a是由3个一维数组所组成的。

因此a代表的是首 行的起始地址(即第0行的起始地址,&a[0]),a+1代 表a[1]行的首地址,即&a[1]。

a[0],a[1],a[2]既然是一维数组名,而C++又规定了 数组名代表数组首元素地址,因此a[0]代表一维数 组a[0]中0列元素的地址,即&a[0][0]。a[1]的值是 &a[1][0],a[2]的值是&a[2][0]。

*(a[0]+1) 就是 a[0][1]元素的值。而a[0]又是和*(a+0)无条件等价 的,因此也可以用*(*(a+0)+1)表示a[0][1]元素的值。 依此类推,*(a[i]+j)或*(*(a+i)+j)是a[i][j]的值。

 #include <iostream>
using namespace std; int main()
{
int a[][]={,,,,,,,,,,,};
int *p;
for(p = a[]; p < a[] + ; p++ )
{
cout << *p << " ";
}
cout << endl;
return ;
}

如果指针变量p先指向a[0](即p=&a[0]),则 p+1不是指向a[0][1],而是指向a[1],p的增值以一 维数组的长度为单位

[C++程序设计]多维数组元素的地址的更多相关文章

  1. PHP多维数组元素操作类

    我的框架里面一个多维数组元素操作类,主要用于读取数组中配置数据,可以通过字符串节点的方式:a.b.c 来获取和设置元素,以及多维数组的覆盖,有需求的可以参考下吧! <?php /** * Cre ...

  2. C二维数组用指针地址遍历

    #include <stdio.h> #include <stdlib.h> int main(){ int a = 100; void *p = &a; printf ...

  3. C++程序设计实践指导1.10二维数组元素换位改写要求实现

    改写要求1:改写为以单链表和双向链表存储二维数组 改写要求2:添加函数SingleLinkProcess()实现互换单链表中最大结点和头结点位置,最小结点和尾结点位置 改写要求3:添加函数Double ...

  4. C/C++拾遗(一):关于数组的指针和数组元素首地址的一道经典题

    代码例如以下: #include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&am ...

  5. C++入门经典-例6.1-一维数组元素

    1:代码如下: // 6.1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  6. C++访问二维数组元素

    if(*image_in+j*+xsize+i)>=thresh)//xsize图像宽度 image_out是首地址,加上j*行宽就是目标行的首地址,再加上i,就是在此行中的第i个像素,所以整个 ...

  7. 二维数组和指针(C语言)

    二维数组和指针 二维数组和指针1.二维数组和数组元素的地址若有以下定义:int *p, a[3][4]; 1)二维数组a由若干个一维数组组成在C语言中定义的二维数组实际上是一个一维数组,这个一维数组的 ...

  8. C语言——二维数组

    目录 二维数组 一.二维数组的定义 二.二维数组的初始化 三.通过赋初值定义二维数组的大小 四.二维数组与指针 二维数组 一.二维数组的定义 类型名 数组名[ 常量表达式1 ][ 常量表达式2 ] i ...

  9. C语言多维数组的地址

    设有整型二维数组a[3][4]如下: 0   1   2   3 4   5   6   7 8   9  10  11  它的定义为:     int a[3][4]={{0,1,2,3},{4,5 ...

随机推荐

  1. [GitPython]使用python管理你的git库

    你想使用python来自动管理一个git仓库的时候,GitPython是一个不错的选择. 简介: 先看看下面这段代码: from git import Repo repo = Repo("~ ...

  2. Scala学习笔记--抽象成员

    package com.evor.test1 class Test1 { } object Test1{ def main(args:Array[String]):Unit = { //类参数和抽象字 ...

  3. SQLServer中数据库文件的存放方式,文件和文件组

    我们公司近一年来做了一个CRM系统. 遇到一个问题就是:在插入交流记录的时候速度特别慢.(交流记录数据量大) 后来我们经理采用文件组的方法,将客户交流记录这张表提出来就快很多了 这里有一篇关于文件组的 ...

  4. jQuery对象转换为DOM对象

    第一种方法:借助数组下标来读取jQuery对象集合中的某个DOM元素对象. <script src="Scripts/jquery-1.4.1.js" type=" ...

  5. 用continue语句的时候,要千万小心内存泄漏,当然还有return和break也是

    疑惑了大半年的内存泄漏,居然是因为这个原因- 有空学学QT的指针使用,可以使得代码更简洁.更不容易内存泄漏-

  6. Powershell 执行外部命令

    Powershell 执行外部命令 724 11月, 2011  在 Powershell  tagged Powershell教程 / 程序 by Mooser Lee本文索引[隐藏]1通过nets ...

  7. Grid++Report 数据填充教程

    用 Grid++Report的报表设计器应用程序设计一个简单的报表:“机房开发收入总汇表”                  一.定义报表头 1.执行菜单命令“插入”→“报表头” 2.执行菜单命令“插 ...

  8. 解决Struts2.2.20版本的标签不支持style属性的问题

    我先把Exception错误信息贴出来:org.apache.jasper.JasperException: /WEB-INF/jsp/topicAction/addUI.jsp (line: 40, ...

  9. iOS 大牛

    1,http://lixing123.com 2,http://kayosite.com

  10. C#中,表达式的计算遵循一个规律:从左到右依次计算。

    int i = 0; int j = (i++)+(i++)=(i++)+i=i+++i=i+++i++=1;