关于二维数组地址问题的一个答复

【来信】

敬爱的贺老师:

  您好!
  一直关注您的CSDN博客,首先向您说声辛苦了。作为外校的一名学生,我想向您请教一个关于二维数组的问题。程序如下:

  int a [3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
     cout << hex << a << endl;
     cout << hex << &a[0][0] << endl;
     cout << hex << a[0] << endl;
     cout << hex << &a[0] << endl;
     cout << endl;
     cout << hex << a+1 << endl;
     cout << hex << a[1] << endl;
     cout << hex << &a[1] << endl;
     cout << hex << &a[1][0] << endl;

     cout << *(a+1) << endl;

  我的理解是:

  但为什么a[i]和*(a+i)是等价的呢?可能是我的习惯性思维,一直认为*是解析符号,得到的一定是个具体的数值,而不是个地址。

  同时,a+i已经是个地址了,为什么*(a+i )还是个地址呢?绕不过弯了。期待您的解惑。

【回复】

你好:
  关于这个问题,我已经给你写了一些文字。这里面有些绕的东西,写出来需要抠字眼,不容易。这里面也有文字不便传达的内容。这样的问题,可能更适合当面讨论完成。
  所以我放弃已经写的文字,这样写完至少需要我1个小时时间。换个思路,帮你解答。实际上,这也是你在今后学习中遇到类似具体问题的处理策略。
  首先,在身边找到能讨论的人。
  其次,如果“首先”不具备条件的话,这样的问题,算是初学者比较普遍的问题,可以通过搜索引擎找,可以上论坛找。如果没有满意的答复,自己发贴求助。我知道不少问题,CSDN的论坛中会有不少热心人会帮助。
  就你的问题,我用百度,浏览到下面3个链接可能对你有用:(1)(2)(3)
  以这样的方式,看大家的观点,会从不同角度讲,比听一个人讲效果好,也能够更锻炼你的辨析能力。
  以此作答。

==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-11-02 11:39:45

关于二维数组地址问题的一个答复的相关文章

一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组?

问题描述 一个现成的二维数组,如何定义一个 指针的指针 来指向这个二维数组? 例:这样一个数组,想定义一个指针的指针,指向它. int arr1[4][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; ps. 这个指针的指针 是 用来传递个函数的. 因为某种要求,需要向函数传递一个二维数组,函数的形参表中定义了 int **. 因此 这个指针的指针一定要能够传递函数,并且函数能够通过它操作二维数组元素. 解决方案 指向二维数组的

位置-有关计算机原理二维数组地址的问题

问题描述 有关计算机原理二维数组地址的问题 设有个一二维数组A[6][8]假设A[0][0]存放位置在1000每个元素占6个空间按行优先存储则A[3][6]的存储位置是多少? 解决方案 应该是1180,3*8+6,A[3][6]的首地址是6,不是7, 解决方案二: 应该是1186吧.(10个字符) 解决方案三: 1180,一共31个元素,(31-1)*6+1000 解决方案四: (A[0][7])7+ (A[3][7])8*3-1(A[3][6]) 解决方案五: typedef struct {

datagridview将选中矩形区域值存入二维数组,碰到了一个问题?

问题描述 为什么这两行代码的值为0呢,我明明选中了四行两列啊?intnum=dataGridView1.SelectedCells.Count;intcolNum=dataGridView1.SelectedColumns.Count; 解决方案

vb.net如何将二维数组的第一行数据赋值给一个一维数组

问题描述 a是一个二维数组,b是一个一维数组,如何将a中第一行数据全部赋值给b,不能使用for--next单个赋值,因为每一行的数据太多,有四万多个,单个赋值太慢,有什么办法可以直接赋值啊?谢谢了! 解决方案 解决方案二:4万个对于计算机来说不算多.现在的处理器每秒钟可以处理百亿级别的数据量.可以用Marshal.Copy实现堆上内存的直接拷贝,这是最快的.http://blog.csdn.net/xiaobai1593/article/details/7065955解决方案三:引用1楼caoz

【急】c# COPY 二维数组的整行 到 一个一维数组 还有MEMORY RYCLE

问题描述 如何COPY二维数组的整行到一个一维数组还有MEMORYRYCLEobject[,]obj_=....;//这里obj_已经被实例化了.Dictionary<string,object[]>data=newDictionary<string,object[]>();data["First"]=newobject[28];//我想把obj_的每行COPY到data["First"]里,Array.Copy((object[])data

直观理解C语言中指向一位数组与二维数组的指针_C 语言

一维数组和指针:对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我们

PHP实现二维数组按某列进行排序的方法_php技巧

本文实例讲述了PHP实现二维数组按某列进行排序的方法.分享给大家供大家参考,具体如下: /* * 二维数组 按某列排序 * array_multisort($arr1,$arr2) * 手册 例子如下 * */ $data[] = array('volume' => 67, 'edition' => 2); $data[] = array('volume' => 86, 'edition' => 1); $data[] = array('volume' => 85, 'edi

定义JavaScript二维数组采用定义数组的数组来实现_基础知识

1. javaScript没有提供直接定义二维数组的方法,但可以使用定义数组的数组来定义JavaScript二维数组:例如定义一个 4X3二维数组a可以采用如下方法: var a=new Array(); a[0]=new Array(); a[1]=new Array(); a[2]=new Array(); a[3]=new Array(); 下面是一个事例 复制代码 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/

Java中的二维数组

Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空间 或者 如: 2. 赋值 二维数组的赋值,和一维数组类似,可以通过下标来逐个赋值,注意索引从 0 开始 也可以在声明数组的同时为其赋值 如: 3. 处理数组 二维数组的访问和输出同一维数组一样,只是多了一个下标而已.在循环输出时,需要里面再内嵌一个循环,即使用二重循环来输出二维数组中的每一个元素.如: