且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-01-06 05:30:18

【来信】

敬爱的贺老师:

  您好!
  一直关注您的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菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====