| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 627 人关注过本帖
标题:指针可真抽象啊,哎,指向二维数组的指针,搞不懂
只看楼主 加入收藏
迷途的菜鸟
Rank: 2
等 级:论坛游民
帖 子:36
专家分:50
注 册:2012-3-20
结帖率:83.33%
收藏
 问题点数:0 回复次数:8 
指针可真抽象啊,哎,指向二维数组的指针,搞不懂
#include <stdio.h>

main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int *p;
    p = a;
   
    for (i=0; i<3; i++)
        for (j=0; j<4; j++)
        {
            printf("%d", *(*(p+i)+j));
        }
}
我是想打印二维数组中各元素的值,代码在上面,帮帮本菜鸟
搜索更多相关主题的帖子: include 
2012-06-19 20:52
雪狼MJ
Rank: 8Rank: 8
来 自:甘肃
等 级:蝙蝠侠
威 望:4
帖 子:267
专家分:853
注 册:2012-5-27
收藏
得分:0 
可以把二维数组当成一个一位数组看待,代码如下:
#include <stdio.h>

int main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int *p;
    p = &a[0][0];
   
    for (i=0; i<12; i++){
        printf("%d ", *(p+i));  
    }
    putchar(10);
    return 0;
}
但这是搞欺骗,这样明显破坏了程序的可读性。
另一种方法就是把指针变量赋值为第i行的第0个的地址,代码如下:
#include <stdio.h>

int main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int *p;  
    for (i=0; i<3;i++){
        p=a[i];
        for (j=0; j<4; j++)
        {
            printf("%d  ", *(p+j));
        }
    }
    return 0;   
        
}
希望能帮到你!~

Edsger Dijkstra:算法+数据结构=程序
2012-06-19 22:46
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
程序代码:
#include <stdio.h>

main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int (*p)[4];  //这里修改一下
    p = a;
    
    for (i=0; i<3; i++)
        for (j=0; j<4; j++)
        {
            printf("%d", *(*(p+i)+j));
        }
}
2012-06-19 23:25
qq383264679
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:155
专家分:130
注 册:2012-1-19
收藏
得分:0 
支持demonleer大哥的·

      
2012-06-20 09:17
handle09
Rank: 1
等 级:新手上路
帖 子:7
专家分:1
注 册:2012-5-15
收藏
得分:0 
*(*(p+i)+j)
学习了
2012-06-20 09:42
Mrnobody
Rank: 2
等 级:论坛游民
帖 子:19
专家分:17
注 册:2012-6-20
收藏
得分:0 
  int (*p)[4];  什么意思啊
2012-06-20 20:23
Mrnobody
Rank: 2
等 级:论坛游民
帖 子:19
专家分:17
注 册:2012-6-20
收藏
得分:0 
回复 2楼 雪狼MJ
int (*p)[4];  这个是什么意思啊
2012-06-20 20:44
迷途的菜鸟
Rank: 2
等 级:论坛游民
帖 子:36
专家分:50
注 册:2012-3-20
收藏
得分:0 
以下是引用雪狼MJ在2012-6-19 22:46:15的发言:

可以把二维数组当成一个一位数组看待,代码如下:
#include <stdio.h>

int main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int *p;
    p = &a[0][0];
   
    for (i=0; i<12; i++){
        printf("%d ", *(p+i));  
    }
    putchar(10);
    return 0;
}
但这是搞欺骗,这样明显破坏了程序的可读性。
另一种方法就是把指针变量赋值为第i行的第0个的地址,代码如下:
#include <stdio.h>

int main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int *p;  
    for (i=0; i<3;i++){
        p=a;
        for (j=0; j<4; j++)
        {
            printf("%d  ", *(p+j));
        }
    }
    return 0;   
        
}
希望能帮到你!~

谢谢你,我昨天找到了解决办法,但是你的解释我也受益了!
2012-06-20 21:31
迷途的菜鸟
Rank: 2
等 级:论坛游民
帖 子:36
专家分:50
注 册:2012-3-20
收藏
得分:0 
以下是引用demonleer在2012-6-19 23:25:36的发言:


#include <stdio.h>

main()
{
    int i, j;
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int (*p)[4];  //这里修改一下
    p = a;
   
    for (i=0; i<3; i++)
        for (j=0; j<4; j++)
        {
            printf("%d", *(*(p+i)+j));
        }
}

昨天我找到解决办法了,就是这样!我指针定义有问题
2012-06-20 21:32
快速回复:指针可真抽象啊,哎,指向二维数组的指针,搞不懂
数据加载中...
 
   



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

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