| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 280 人关注过本帖
标题:基本的问题哈,求答
只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:20 回复次数:1 
基本的问题哈,求答
[code][#include"stdio.h"
main(){
static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
int(*p)[4];
int i,j;
p=a;
for(i=0;i<3;i++)
for(j=0;j<4;j++) printf("%2d ",*(*(p+i)+j));
/code]

为什么多维数组的指针变量的长度不是多维数组的行数而是该多维数组的列数,在按指针法求值的时候,按理解,指针变量P的上限也是多维数组的行数啊
搜索更多相关主题的帖子: include 
2012-05-15 23:01
小糊涂神c30
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:198
专家分:809
注 册:2012-4-25
收藏
得分:20 
int (*p)[4]这是一个指针,它指向的是一个有四个元素的数组,而且指针自增一的时候他会跳过数组的四个元素,指向下一个数组的元素;由于此数组的宽度刚好是四个,和a[3][4]的列宽是相同的,所以指针数组的长度刚好是数组a的宽度。如果你定义int (*p)[2]=a;你会发现p自增一的时候只跳过两个元素。例如*(*(p+1))指向2这个元素。
突然想到另一种解释,也许更好理解;指针和数组使用方法上是等价的,可以把int (*p)[4]中的*P看做是数组p[];这时候你会发现指针数组变成了int p[][4];这时候你发现了吧,p[][4]和a[3][4]变成了等价的了。
自己好好理解两次吧!
2012-05-16 15:45
快速回复:基本的问题哈,求答
数据加载中...
 
   



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

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