| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 877 人关注过本帖, 1 人收藏
标题:为什么出来的答案是60?【指针数组,指针没学好的勿入!】
只看楼主 加入收藏
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:0 
a[3][2],我觉得前面个3和指针没有任何直接的联系,
有关系的不过是偏移量,
你可以把下面的代码运行下,
就知道你的理论是不对的。

#include <stdio.h>
int main()
{
    int a[3][2]={10,20,30,40,50,60},(*p)[4];
    p=a;
    printf("%d\n",*(*(p+1)+1));
    return 0;
}
2012-01-08 20:03
hk327143206
Rank: 2
等 级:论坛游民
帖 子:35
专家分:31
注 册:2011-6-25
收藏
得分:0 
不知道为什么
#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;
}
这个p=a;是什么意思?*p是什么类型??是什么意思?
2012-01-08 20:16
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 11楼 love24114
你应该小心程序编译时的警告,不是能运行的程序都是能和期望相符的。
p这个指针的容纳能力是4,而你给与他指向的数组是个3行2列的。 p + 1 要前进4个单位,*(p + 1)已然指向了50 *(*(p + 1) + 1) 岂不是60?

梅尚程荀
马谭杨奚







                                                       
2012-01-08 20:21
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
如果你把数组a 改成a[3][4] 照样得到相同的结果。

梅尚程荀
马谭杨奚







                                                       
2012-01-08 20:25
driftsand
Rank: 2
等 级:论坛游民
帖 子:25
专家分:85
注 册:2011-12-21
收藏
得分:20 
本人觉得你可能是对]int (*p)[2]  没有理解清楚。

int (*P)[2],表示p指向一个包含2个int值的数组;

int *p[2],表示p是由2个指向int值的指针组成的数组。

Don't tell lies because those who believe your lies are the ones who believe in you.
2012-01-08 20:30
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
貌似楼主认为我是在胡扯。不过我自认为每句话都是深思熟虑的。如果你认为的说的不对可以指出我的错误,真错了,你理解的深刻我也有了进步。大可不必搞些‘非诚勿扰’‘华人勿入’的标牌来划分殖民地。我也是刚刚学c语言,学习和看论坛同时起步。这个论坛给了我很大的帮助(特别要感谢TonyDeng).我有很多很多东西还不懂,只是在自己能力范围之内和坛友进入交流,期望双方都有所得。

你说我的理论不对,希望指出来我们可以继续讨论。

梅尚程荀
马谭杨奚







                                                       
2012-01-09 10:28
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
#include
 int main()
 {
     int a[3][2]={10,20,30,40,50,60},(*p)[2];
     p=a;
     printf("%d\n",*(*(p+2)+1));
     return 0;
 }
int (*p)[2];定义一个指针,指针只向含有两个整形元素的数组
p指向第1行地址,p+2指向第3行地址.
*(p+2)指向第3行第1个元素地址,*(p+2)+1 指向第3行第2个元素地址,
*(*(p+2)+1)就是第3行第2个元素值60

#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;
 }
a本身就是指向向数组a[2]的首地址指针,int (*p)[2];定义一个指针,指针只向含有两个整形元素的数组. 两个同类别指针可以相等.
但是他们增量不同.
a+1每次只增加1个int变量的地址空间
p+1每次只增加2个int变量的地址空间

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



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

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