| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1662 人关注过本帖
标题:为什么普通指针指向二维数组,直接取内容可以得元素值.
取消只看楼主 加入收藏
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
结帖率:84.21%
收藏
已结贴  问题点数:20 回复次数:1 
为什么普通指针指向二维数组,直接取内容可以得元素值.
#include "stdio.h"
void main()
{
    int a[3][2]={{2,4},{5,1},{7,9}};
    int *p=a;
    int (*sp)[2]=a;
    printf("%d",*p);//普通指针指向的二维数组,直接把结果输出了。
    printf("%d",**p);//数组指针则存在一个行指针地址,取两次才行。
}
我是这样理解的:二维数组名a 难道不是数组名吗,那它是不是就应该存在*a或a[0],a[1],a[2]的首行地址?
既然这样,我同样是以指针来接。为什么普通指针只用取一次内容呢?,难道不是同一个二维数组名吗?

小弟新手,有些疑问不解,还望各位多多指教!
2011-03-05 12:40
默默学习
Rank: 4
等 级:业余侠客
帖 子:134
专家分:200
注 册:2010-6-22
收藏
得分:0 
我在VC环境下肯定是编译出来了。
但是我不理解,
#include "stdio.h"
void main()
{
    int a[3][2]={{2,4},{5,1},{7,9}};
    int *p=a;
    int (*sp)[2]=a;
    printf("%d",*p);//这句直接输出了2,也就是二维数组的首元素,.
    printf("%d",**p);//若用数组指针,*p表示的是行指针地址吧,**p直接才取出内容。
}
就是简单的说,用一般的指针,指向二维数组,*p怎么直接输出结果了。
而用数组指针(*sp)[2],**p才输出结果.
2011-03-05 18:07
快速回复:为什么普通指针指向二维数组,直接取内容可以得元素值.
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016936 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved