| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 539 人关注过本帖
标题:关于二维数组指针的问题求教。
只看楼主 加入收藏
wj66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-8-16
结帖率:75%
  已结贴   问题点数:20  回复次数:10   
关于二维数组指针的问题求教。
1.在一维数组中a[1]是与*(a+1)等价的,这个很容易就能理解。
但是二维数组中,a[1]为什么与*(a+1)等价?   书上说a[1]编译时其实是换成*(a+1)进行编译的,
这在一维数组中很容易理解,但在二维数组中*(a+1)代表a[1]行地址?
在二维数组中,如果把a[1]当成一个数组,也很容易理解它是该行数组的首地址,
但剖根究底,它是如何代表a[1]行首地址的?在计算机内部它是怎么实现的?
2.二维数组a中,a+1和*(a+1)都是地址,这个怎么理解呢?
谢谢解答!
搜索更多相关主题的帖子: 二维数组 代表 指针 编译 地址 
【推荐】大型监控、工控、组态VC++./C#源码组件库2019下载!
【推荐】超50万数控、建模仿真、电力VC++/.NET图形源码库下载!
【推荐】专业CAD\GIS\业务流程VC++/C#可视化图形软件源码库下载!
2019-09-04 16:23
forever74
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:CC
等 级:贵宾
威 望:25
帖 子:1235
专家分:2070
注 册:2007-12-27
  得分:5 
在人这一辈子的学习过程中,不是什么都要理解,什么都能理解的。
平面几何是建立在几条公理基础上的----公理是不需要理解的。
你的问题,拟照此办理:对于二维数组a,运算符*的含义不是取目标,而是降低指针等级,这个是规定,不需要理解,OK?
是故,运算符*有的时候是乘法,有的时候是降低指针等级,有的时候是取目标,或者忠实但较生硬地表示为解除引用。

[此贴子已经被作者于2019-9-4 16:51编辑过]


别人能不等于你能,别人不能不等于你不能
不要问别人能不能,要说:我能
2019-09-04 16:47
forever74
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:CC
等 级:贵宾
威 望:25
帖 子:1235
专家分:2070
注 册:2007-12-27
  得分:0 
等你学明白了以后再忘记我的说法----这个叫无招胜有招。

别人能不等于你能,别人不能不等于你不能
不要问别人能不能,要说:我能
2019-09-04 16:55
wj66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-8-16
  得分:0 
回复 2楼 forever74
谢谢您! 说实话第一次听说降低指针等级,更别谈理解了。
如果在二维数组中将a[1]理解为该行数组的首元素地址,
*(a+1)与其等价,书上内容也就能看懂了。
我是初学者,不知道哪些需要深挖,哪些超出能力范围。
所以我以为是自己哪块知识没翻清,别人点一下就通了。😁

2019-09-04 17:57
wj66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-8-16
  得分:0 
回复 2楼 forever74
我刚才再细读了下书。请问前辈,降低指针类型意思是不是将原先的行指针a+1,转换为列指针,即*(a+1)的意思?
2019-09-04 18:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:334
帖 子:6886
专家分:40054
注 册:2011-1-18
  得分:5 
数组不是地址
2019-09-04 19:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:218
帖 子:6809
专家分:30147
注 册:2014-5-20
  得分:5 
a是数组名,不是指针,用a来表达指针会变得复杂不易理解。
用指针来操作数组的数据可以这样:
#include <stdio.h>
int main()
{
    int a[3][3]={1,2,3, 4,5,6, 7,8,9};
    int *p, i,j;
    printf("整块处理\n");
    p = &a[0][0];
    for (i=0;i<6;++i)
        printf("%d ", *(p+i));
    printf("\n分块处理\n");
    for (i=0;i<3;++i)
    {
        p = &a[i][0];
        for (j=0;j<3;++j)
            printf("%d ", *(p+j));
        printf("\n");
    }
}



[此贴子已经被作者于2019-9-5 05:09编辑过]

2019-09-05 05:00
moc
Rank: 2
等 级:论坛游民
帖 子:5
专家分:12
注 册:2015-8-20
  得分:5 
回复 楼主 wj66
请思考一下一维数组int a[5]中a+1中的1代表什么;同理在二维数组int a[5][2]中a+1中1代表什么 . 如果能够明白这两个1代表什么,那么你的问题自然迎刃而解。
2019-09-05 08:16
lin5161678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:17
帖 子:534
专家分:1958
注 册:2011-12-3
  得分:0 
a[0] 等于 *a 这个只是语法糖
* 和 [] 互相无缝替换
能用*表达 全部可以转换为用[]表达
你不能用 * 和 [] 互相转换 理解什么东西 或者 不理解什么东西

2019-09-10 15:50
zhouaichun
Rank: 1
等 级:新手上路
帖 子:6
专家分:8
注 册:2015-4-6
  得分:0 
不管是一维数组还是多维数组,数组名都指向数组的第一个元素的地址,可以把数组名理解成常量指针。从书中了解一下各元素在内存中的存储位置,对你分析上述问题是有帮助的。
2019-09-10 16:19
快速回复:关于二维数组指针的问题求教。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079202 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved