| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1760 人关注过本帖
标题:指向二维数组的指针变量
只看楼主 加入收藏
王璐
Rank: 2
等 级:论坛游民
帖 子:126
专家分:54
注 册:2010-7-26
结帖率:93.1%
收藏
已结贴  问题点数:20 回复次数:8 
指向二维数组的指针变量
下面这个程序中
#include<stdio.h>
void main()
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},*p;
    for(p=a[0];p<a[0]+12;)
    {
        printf("%4d ",*p++);   
        if(int(p-p[0])%2==0)
            printf("\n");
        
        
    }
    printf("\n");
}if语句中的p-p[0]是不是永远是0,但是如果改为%3,或者5以后,就不会按行输出了,那是怎么回事呢?
搜索更多相关主题的帖子: 变量 指针 
2010-09-24 16:44
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:5 
刚发错了 再想下

[ 本帖最后由 清风拂晓 于 2010-9-24 17:19 编辑 ]

清风拂暮(木)
2010-09-24 17:04
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:5 
回复 楼主 王璐
不知道表达是什么,整型占的字节不是二就是四应该都能整除二吧!

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2010-09-24 17:47
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
你应该是要每行显示2个数

清风拂暮(木)
2010-09-24 17:53
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:5 
呵呵呵

[ 本帖最后由 我菜119 于 2010-9-24 19:12 编辑 ]

愿用余生致力编程
2010-09-24 18:13
清风拂晓
Rank: 8Rank: 8
来 自:火星
等 级:蝙蝠侠
威 望:1
帖 子:356
专家分:889
注 册:2010-8-13
收藏
得分:0 
上面的得到启发P++之后P是指向了第二行的第一个元素的地址  而P[0]一直都是第一行第一个元素的地址 应为你设定的二维数组的第二位是4即第一行和第二行的第一个元素中间有4个元素  所以int(p-p[0])永远都是4

清风拂暮(木)
2010-09-24 18:26
Crocodile_JX
Rank: 5Rank: 5
等 级:职业侠客
帖 子:161
专家分:335
注 册:2010-9-13
收藏
得分:5 
指针不能直接运算,修改如下:运行的结果是输出数组的元素...
#include<stdio.h>
void main()
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},*p;
    for(p=a[0];p<a[0]+12;)
    {
        printf("%4d ",*p++);   
        if((*p-p[0])%2==0)   /*修改这一句*/
            printf("\n");
        
        
    }
    printf("\n");
    getch();
}
2010-09-24 20:52
王璐
Rank: 2
等 级:论坛游民
帖 子:126
专家分:54
注 册:2010-7-26
收藏
得分:0 
我想知道p[0]到底跟不跟p走
2010-09-25 21:31
Tothend
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2011-8-3
收藏
得分:0 
首先感谢。看了你的问题,我自己打开程序测试。搞明白了二维数组指针问题。
程序代码:
# include <stdio.h>

int main(void)
{
    double a[3][3] = {0};
    double * p;
    int i, j;

//    p = a;    cannot convert from 'int *' to 'int [3][3]'
    p = a[0];

//    printf("%lf", p[2]);

   
    for (j=0; j<3; ++j)
    {
        for (i=0; i<3; ++i)
        {
            scanf("%lf", &p[i]);
        }
        p++;
    }
   
    for (j=0; j<3; ++j)
    {
        for (i=0; i<3; ++i)
        {
            printf("%lf", p[i]);
        }
        p++;
    }
}
你看下吧。
p指针指向二维数组实际只能指向a[0][0]的地址。
也就是等价于一维数组(a[0])[]的指针。
对p的运算实际就是改变二维数组的行。
对其进行的减法运算结果就是一维数组的个数。
你设置的一维数组元素个数为4,你可以用sizeof求下它的长度,是2的倍数。所以你if语句没什么意义。
2011-08-07 11:49
快速回复:指向二维数组的指针变量
数据加载中...
 
   



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

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