| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 960 人关注过本帖
标题:刚才无聊 尝试着将二维数组和一维数组进行了一下转换,结果成功,但是有一点 ...
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:100 回复次数:14 
刚才无聊 尝试着将二维数组和一维数组进行了一下转换,结果成功,但是有一点(绿线部分)不是很理解,哪位给解释一下
程序代码:
#include <stdio.h>

int main(int argc, char* argv[])
{
    int zip[4][2];
    int i,j;
    //以下是对二维数组进行简单的赋值
    for(i=0;i<4;i++)
    {
        for(j=0;j<2;j++)
        {
            zip[i][j]=(i+1)*(j+1);
        }
    }
    printf("以下是对二维数组进行输出\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%4d",zip[i][j]);
        }
    }
    printf("\n\n\n以下是转换一维数组之后的输出\n");
    for(i=0;i<8;i++)
    {
        printf("%4d",(zip[i]-i)[0]);   //这里要加[0] 才能输出具体的元素值
        //printf("%4d",(zip[i]-i));   //注意如果改成这个代码,则输出数组元素地址而不是元素值

    }
    printf("\n\n\n...............over\n");
    return 0;
}



[ 本帖最后由 wp231957 于 2014-1-14 12:47 编辑 ]
2014-01-14 12:46
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:34 
程序代码:
#include <stdio.h>

int main(int argc, char* argv[])
{
    int zip[4][2];
    int i,j;
    //以下是对二维数组进行简单的赋值
    for(i=0;i<4;i++)
    {
        for(j=0;j<2;j++)
        {
            zip[i][j]=(i+1)*(j+1);
        }
    }
    printf("以下是对二维数组进行输出\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%4d",zip[i][j]);
        }
    }
    printf("\n\n\n以下是转换一维数组之后的输出\n");
    for(i=0;i<8;i++)
    {
        // printf("%4d",(zip[i]-i)[0]);   //这里要加[0] 才能输出具体的元素值
        //printf("%4d",(zip[i]-i));   //注意如果改成这个代码,则输出数组元素地址而不是元素值
        printf("%4d",zip[0][i]);
    }

    printf("\n\n\n以下是转换一维数组之后的输出\n");
    for (i = 0; i < 8; i++)
    {
        int *p = &zip[0][0];
        printf("%4d", p[i]);
    }
    printf("\n\n\n...............over\n");

    return 0;
}

2014-01-14 13:01
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我觉得这样就好了。。。
2014-01-14 13:01
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
printf("%4d",zip[0][i]);
感觉还是二维呢

DO IT YOURSELF !
2014-01-14 13:23
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:34 
printf("%4d",(zip[i]-i)[0]);   //这里要加[0] 才能输出具体的元素值
  //printf("%4d",(zip[i]-i));   //注意如果改成这个代码,则输出数组元素地址而不是元素值

zip[i]是一个指针,值就是zip[i][0]的地址, 所以(zip[i] - i)输出的是zip[i][0]前i个元素的地址值,  
后面加的[0]是取该地址的值, 你也可以直接用 *(zip[i] - i)
i = 0; zip[i] 是zip[0][0]的地址
i = 1; zip[i] 是zip[1][0]的地址(中间跳了一个zip[0][1]),
以此类推, 所以要用(zip[i] - i)
2014-01-14 13:48
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:34 
多维数字实质上就是一维d

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2014-01-14 14:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
感谢各位啊 (来着均由分)  现在能够通过编译并得到正确结果的共有4种方法:

程序代码:
#include <stdio.h>

int main(int argc, char* argv[])
{
    int zip[4][2];
    int i,j;
    //以下是对二维数组进行简单的赋值
    for(i=0;i<4;i++)
    {
        for(j=0;j<2;j++)
        {
            zip[i][j]=(i+1)*(j+1);
        }
    }
    printf("以下是按照普通方式对二维数组进行输出\n");
    for(i=0;i<4;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%4d",zip[i][j]);
        }
    }
    printf("\n\n\n以下是第一种转换一维数组之后的输出\n");
    for(i=0;i<8;i++)
    {
        printf("%4d",(zip[i]-i)[0]);

    }
    printf("\n\n\n以下是第二种转换一维数组之后的输出\n");
    for(i=0;i<8;i++)
    {
        printf("%4d",zip[0][i]);

    }
    printf("\n\n\n以下是第三种转换一维数组之后的输出\n");
    for(i=0;i<8;i++)
    {
        printf("%4d",*(zip[i]-i));

    }
    printf("\n\n\n以下是第四种转换一维数组之后的输出\n");
    int *p=&zip[0][0];
    for(i=0;i<8;i++)
    {
        printf("%4d",p[i]);

    }
    printf("\n\n\n...............over\n");
    return 0;
}

DO IT YOURSELF !
2014-01-14 14:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
我感觉楼主的写法太复杂了 又得不到什么好处 还是新定义一个指针好 这样最清晰
2014-01-14 14:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用wp231957在2014-1-14 14:47:47的发言:

感谢各位啊 (来着均由分)  现在能够通过编译并得到正确结果的共有4种方法:
 
哈哈 5个错了两个字
2014-01-14 14:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用zklhp在2014-1-14 14:51:58的发言:

哈哈 5个错了两个字

拼音输入法害人啊

DO IT YOURSELF !
2014-01-14 14:53
快速回复:刚才无聊 尝试着将二维数组和一维数组进行了一下转换,结果成功,但是 ...
数据加载中...
 
   



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

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