| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 485 人关注过本帖, 1 人收藏
标题:关于指针和数组
取消只看楼主 加入收藏
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏(1)
 问题点数:0 回复次数:2 
关于指针和数组
图片附件: 游客没有浏览图片的权限,请 登录注册

#include<stdio.h>
void main()
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int *p;
    for(p=a[0];p<a[0]+12;p++)
        {
            if((p-a[0])%4==0)
                printf("\n");
            printf("%4d",*p);
        }
    printf("\n");
}


结果输出是:
1 3 5 7
9 11 13 15
17 19 21 23

为什么四个一行,p+1相当于地址加4吧,为什么p-a[0]还能是1?
2011-08-03 22:05
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 3楼 voidx
(p-a[0])%4==0说的是p指向的那个元素的地址-&a[0][0]是4的倍数吧!!如果是这样那岂不是一直是0???
2011-08-04 21:18
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 6楼 voidx
运行是没错啦,但是我怎么都想不明白它是怎么运行的,我最上面那个截图里p的值是0x0012ff54,a[0]是0x0012ff50,他俩一减怎么会是0x00000001
2011-08-05 10:43
快速回复:关于指针和数组
数据加载中...
 
   



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

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