| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 877 人关注过本帖, 1 人收藏
标题:为什么出来的答案是60?【指针数组,指针没学好的勿入!】
只看楼主 加入收藏
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
结帖率:81.48%
收藏(1)
已结贴  问题点数:20 回复次数:16 
为什么出来的答案是60?【指针数组,指针没学好的勿入!】
#include <stdio.h>
int main()
{
    int a[3][2]={10,20,30,40,50,60},(*p)[2];
    p=a;
    printf("%d\n",*(*(p+2)+1));
    return 0;
}
//还有下面这个问题
#include <stdio.h>
int main()
{
    int a[2],(*p)[2];
    p=a;//这句怎么会通过啊??我郁闷
    printf("%p %p\n",a,a+2);
    printf("%p %p\n",p,p+2);
    return 0;
}
//为什么偏移量不一样呢???主要是这个问题。

[ 本帖最后由 love24114 于 2012-1-8 20:06 编辑 ]
搜索更多相关主题的帖子: include return 
2012-01-08 19:14
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
10 20
30 40
50 60
则 a[2][1] = ?

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-01-08 19:30
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
3行2列二维数组 p + 2 是指向第3行 相当于一个排长用手指向第3排, *(p + 2) 是第3排队对头, 相当于3班班长举手,*(*(p+2)+1))是说第3排也就是3班从班长往后走一位,找出这个兵,而且叫他出列。50是3班班长位置,60就是你程序里要的那个兵。 这么说不知道你晕了没?

梅尚程荀
马谭杨奚







                                                       
2012-01-08 19:34
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:0 
#include <stdio.h>
int main()
{
    int a[2],(*p)[2];
    p=a;//这句怎么会通过啊??我郁闷
    printf("%p %p\n",a,a+2);
    printf("%p %p\n",p,p+2);
    return 0;
}
//为什么偏移量不一样呢???主要是这个问题。

[ 本帖最后由 love24114 于 2012-1-8 19:46 编辑 ]
2012-01-08 19:39
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:0 
4楼的代码能编译通过?

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-01-08 19:41
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:0 
回复 3楼 有容就大
为什么p+2是指向第三列,p+2,指针也占4字节。
2012-01-08 19:44
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:0 
可以,自己试下就知道。C语言。
2012-01-08 19:44
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 4楼 love24114
我的理解是 P相等于一个排长 可以指向 任何一个班(班里只有2个兵)a 相当于一个班长 只能逐个指向班里的成员。因此 p + 1 是走了一个班的长度, 而 a + 1 只是走了一个兵的长度 %p 是打印地址 p = a 说明 a ,p 起始地址相同,a , p 每偏移一个单位的长度是不一样的。

梅尚程荀
马谭杨奚







                                                       
2012-01-08 19:57
driftsand
Rank: 2
等 级:论坛游民
帖 子:25
专家分:85
注 册:2011-12-21
收藏
得分:0 
以下是引用love24114在2012-1-8 19:39:44的发言:

#include  
int main()
{
    int a[2],(*p)[2];
    p=a;//这句怎么会通过啊??我郁闷
    printf("%p %p\n",a,a+2);
    printf("%p %p\n",p,p+2);
    return 0;
}
//为什么偏移量不一样呢???主要是这个问题。
一个相当于一维数组,一个相当于二维数组,肯定偏移量不一样了

Don't tell lies because those who believe your lies are the ones who believe in you.
2012-01-08 20:01
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 6楼 love24114
请注意p 是指向一个一维数组的指针, 这个一维数组拥有n个成员。 p + 1  就移动 n 个数组成员长度。所以我老用排长来形容他,级别不一样啊,跨的步子也就大咯。

梅尚程荀
马谭杨奚







                                                       
2012-01-08 20:02
快速回复:为什么出来的答案是60?【指针数组,指针没学好的勿入!】
数据加载中...
 
   



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

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