zoukankan      html  css  js  c++  java
  • [C++程序设计]多维数组元素的地址

    设有一个二维数组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]的值。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
     7     int *p;
     8     for(p = a[0]; p < a[0] + 12; p++ )
     9     {
    10         cout << *p << " ";
    11     }
    12     cout << endl;
    13     return 0;
    14 }

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

  • 相关阅读:
    Javascript 高级程序设计(第3版)
    小文笔记
    修改hadoop FileUtil.java,解决权限检查的问题
    编译hadoop遇到maven timeout
    Hadoop Eclipse开发环境搭建
    tcpdump抓包
    Hadoop JobTracker和NameNode运行时参数查看
    Hadoop hostname: Unknown host
    java.io.IOException: Incompatible namespaceIDs
    Hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/galoishelley/p/3858344.html
Copyright © 2011-2022 走看看