| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1777 人关注过本帖
标题:二维数组与指针的问题
只看楼主 加入收藏
xzuok
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2009-10-16
结帖率:60%
收藏
 问题点数:0 回复次数:12 
二维数组与指针的问题
看下面这个程序,看能不能这样赋值
mian()
{static int a[3][4]={1,3,5,5,5,5,5,5,5,5,5,5};
int *p;
p=a        /问,我能这样给指针变量p赋值吗,我让p指向二维数组首地址a,这样可以吗?/
}
搜索更多相关主题的帖子: 指针 
2009-10-24 10:36
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
语法无错,程序错,程序肯定不会按你想象的那样计算。
顺便说下,没有mian这一说法,p=a后面要有分号

[ 本帖最后由 pgy 于 2009-10-24 10:44 编辑 ]

我可好玩啦...不信你玩玩^_^
2009-10-24 10:41
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
试试就知道了撒。。
main()
{static int a[3][4]={1,3,5,5,5,5,5,5,5,5,5,5};
int *p,i=0;
p=a;
for(i=0;i<13;i++)
{
  printf("%d",*(p+i));
  getch();
}
}
我试的这个程序。。。结果显示是135555555555.。是正确的 说明2维数组同样可以直接将数组的首地址赋予一个指针。。但是数组的排列是先横向再纵向。。
也就是 1 3 5
       5 5 5
       5 5 5
       5 5 5
因此*(p+0)为1,*(p+1)为3.。依次类推
2009-10-24 10:44
dengjun000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:77
注 册:2009-10-14
收藏
得分:0 
话说2楼的头像是本人吗?oh.mygod..
2009-10-24 10:45
xiaowenhuman
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:101
专家分:104
注 册:2009-5-10
收藏
得分:0 
void main()
{static int a[3][4]={1,3,5,5,5,5,5,5,5,5,5,5};
int *p;
p=a;
printf("%d\n",a);
printf("%d",p);
getch();
}
输出地址相同,但是没有实际的意义,如果要正确的引用可以这样定义:char (*p)[4];
下面是一个引用:
void main()
{static int a[3][4]={1,3,5,5,5,5,5,5,5,5,5,9};
int (*p)[4],i,j;
p=a;
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
        printf("%d",*(*(p+i)+j));
 
getch();
}
2009-10-24 10:50
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
对于二维数组的元素,我们有两种方法来输出其中的元素,一种就是通过对行与列的下标控制来实现,这种方法不需要用指针就可以实现!当然我想说的是通过二维数组指针来实现!
 
对于a[2][4];这个数组,我们可以这样来看它,就是我们可以把它当做一维数组来处理,怎么回事呢?
我们可以把它看做是由两个一维数组a[0]与a[1]组成的。其中在每一个这样的一维数组中储存了四个元素,也就是说其实在a[0],a[1]中储存了四个元素,所以我们可以通过对一维数组的操作来实现对二维数组的操作!
这又是怎么回事呢?
先讲解一下关于二维数组的指针式怎么一回事吧!
上面我们把二维数组看做是一维数组来处理,其实真正意义上的确不是的,这怎么越听越糊涂吧?呵呵!
上面的一维数组只是一个指向二维数组的指针,比如:a[0]=&a[0][0];也就是说一维数组是一个指向二维数组每一行的第一个元素的地址,同样a[1]则是指向a[1][0]的地址的指针,看到这里不知道你是否有一点“山重水复疑无路,柳暗花明又一天”的感觉?
如果还是不太明白的话,那下面的解释你应该会有点明白吧!
先看一下下面的这个程序的一部分:int a[2][4],*p;p=a;这里的p=a不是我们想像的指向a[0][0]的地址的指针,p指向的是一维数组a[0]的地址,而一维数组的指针才是指向二维数组的地址的,这个一定要搞清楚了!那么如果我那么要对p进行操作的话,比如:p+1;是什么呢?我刚才已经说了,p指向的是一维数组的地址,因此p+1当然指的是a[1]的地址呗!那么怎么才能够实现对二维数组的操作呢?别着急。。。
这就需要我们定义一个行指针来实现了!也就是改帖子里的那个(*ptr)[2]了,我已经讲过它表示的是每一个一维数组里的元素个数,比如我现在想对a[1][2]进行指针操作呢?我们这时可以这样:*(*(p+1)+2)就表示的是a[1][2]这个元素了!
 
好了,就讲这么多吧!打字挺累的喔!呵呵

愿用余生致力编程
2009-10-24 10:50
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 3楼 dengjun000
优化下
main()
{static int a[3][4]={1,3,5,5,5,5,5,5,5,5,5,5};
int *p,i;
p=a;
for(i=0;i<12;i++)
  printf("%d",*(p+i));
  getch();
}

我可好玩啦...不信你玩玩^_^
2009-10-24 10:51
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 4楼 dengjun000
话说我像上帝么

我可好玩啦...不信你玩玩^_^
2009-10-24 10:52
pgy
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:C
等 级:小飞侠
威 望:8
帖 子:1248
专家分:2329
注 册:2009-9-23
收藏
得分:0 
回复 6楼 我菜119
辛苦了

我可好玩啦...不信你玩玩^_^
2009-10-24 10:55
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
回复 7楼 pgy
你的这个程序是一个错误的程序,回家好好的看看二维数组与指针吧!

愿用余生致力编程
2009-10-24 23:48
快速回复:二维数组与指针的问题
数据加载中...
 
   



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

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