| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 779 人关注过本帖
标题:高手帮忙分析一下两个程序
取消只看楼主 加入收藏
lichence
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2009-10-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
高手帮忙分析一下两个程序
第一个程序,书上的例题
#include<stdio.h>
main()
{
    int bx[10]={1,2,3,4},i;
    char name[4][9]={{"张三"},{"李四"},{"王五"},{"赵六"}};
    char (*p)[9];
    p=name;
    for(i=0;i<4;i++)
        printf("bx=%d,name=%s\n",bx[i],(p+i));
}
输出结果是:
bx=0,name=张三
bx=1,name=李四
bx=2,name=王五
bx=3,name=赵六

红色(p+i)这个式子应该是表示“某行一维数组的地址”,为什么放在这里居然可以打印出“所指向数组的内容”?

再对比一下我自己写的另外一个程序:
#include<stdio.h>
main()
{
    int a[5][5],i,j,k=0;
    int (*p)[5];
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            a[i][j]=k++;
        }
    }
    p=a;
    for(i=0;i<5;i++)
    {
        printf("%d",(p+i)
);
        putchar(10);
    }
}

同样是红色部分,但打印结果是:
1244956
1244976
1244996
1245016
1245036

这应该是5行一维数组的地址。我用在VC下单步执行,看到数组a[5][5]中正确分配了0~25个数。

请高手帮小弟分析一下,鸣谢。

[ 本帖最后由 lichence 于 2009-10-12 21:08 编辑 ]
搜索更多相关主题的帖子: include 
2009-10-12 20:41
lichence
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2009-10-6
收藏
得分:0 
回复 2楼 m456m654
楼上的朋友,你说的和书上的一样,但是你先运行一下第一个程序,(p+i)应该是a[0]的地址,但在打印中打出的是一维数组a[0]的值,如果这样可以的话,为什么第二个程序不可以?
2009-10-12 20:53
lichence
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2009-10-6
收藏
得分:0 
回复 4楼 m456m654
楼上的大侠,我运行了你改的那部分,出来的结果是:
0
5
10
15
20

……………………

我想输出的是
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

有办法在原程序上修改出来吗?
刚才的k=0的初值我忘打上去了&……

[ 本帖最后由 lichence 于 2009-10-12 21:05 编辑 ]
2009-10-12 21:03
快速回复:高手帮忙分析一下两个程序
数据加载中...
 
   



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

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