| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 230 人关注过本帖
标题:指针与二维数组
收藏  订阅  推荐  打印
zfzdhz
Rank: 2
等级:注册会员
帖子:54
积分:614
注册:2008-8-21
指针与二维数组

main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p=a[0];
p++;
printf("%d",*p);
}
*p不是一个地址吗   怎么输出的是2  
还有p++是指向a[0][1]
什么情况下指向的是a[1][0]???
2008-10-10 15:01
fxgcquhx
Rank: 1
等级:新手上路
帖子:3
积分:80
注册:2008-10-6

如果像你那样赋值,则*p不是地址,而是&a[0][0];如果想输出a[1][0],则可以将p++改为p+4即可;
  如果你想让*p是一个地址,可以这样做:
void main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int(*p)[3];
p=a;
printf("%d",*(*(p+1)));
}此时p是一个二级指针
2008-10-10 17:17
xfcy
Rank: 1
等级:新手上路
帖子:20
积分:282
注册:2008-9-15

引用:
zfzdhz 在 2008-10-10 15:01 的发言:

main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p=a[0]
int *p=a[0] 有两重意思:
1.int *p定义指针变量p,p指向整型变量
2.p=a[0]将的a[0][0]地址赋给指针变量p,也即有*p=a[0][0]
并不是*p=a[0]
2008-10-10 23:10
zfzdhz
Rank: 2
等级:注册会员
帖子:54
积分:614
注册:2008-8-21

什么情况下指向的是a[1][0]???
2008-10-11 11:45
faminxmu
Rank: 2
等级:注册会员
帖子:75
积分:1027
来自:厦门
注册:2008-4-23

如果按你的代码p=*(a+1)就是指向a[1][0]了

在虚拟的世界中寻找目标。
2008-10-11 12:05
gongjiandenghua
Rank: 1
等级:新手上路
帖子:28
积分:424
注册:2008-5-30

同意楼上
2008-10-11 13:09
xieguoyong888
Rank: 1
等级:新手上路
帖子:7
积分:170
注册:2008-10-11

main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int *p=a[0];
p++;
printf("%d",*p);
}
我也不太明白我就学过几天,我能说出P=2的原因,大家看看对不对*P指向了a[0]就是a的第一个原素那就是1后来P++不就是P再加1吗?
2008-10-11 13:43
yzy6806555
Rank: 1
等级:新手上路
帖子:14
积分:266
来自:河南工业大学
注册:2008-2-28
标准回答!!!

int *p=a[0];
是把a[0]这一行的首地址付给P了,不是把a[0][0]给它了,而且楼主说的就是错了*p和int* p是*的两个不同用法,一个是反引用,一个是简单的做声明用!p++即为a【0】那一行右移一个地址,即为a[0][1],所以就是2了!!
2008-10-11 13:53
共有 229 人关注过本帖
发新话题
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.057411 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved