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

#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
风尘儒生
Rank: 2
等 级:论坛游民
帖 子:8
专家分:31
注 册:2010-11-25
收藏
得分:0 
p+1是地址加1。。。
2011-08-03 22:10
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
在这个程序里,执行 p + 1 时,p 的值却是会 + 4,但是 int 型的长度也是 4,所以当 p 指向 1 时,p + 1 后 p 指向 3。

p + 1 会使 p 的值增加 p 的类型的长度,即:

type *p;
p++;    // 这里 p 的值会增加 sizeof(type);
2011-08-03 23:33
platolgq
Rank: 2
来 自:江西
等 级:论坛游民
帖 子:74
专家分:87
注 册:2011-2-24
收藏
得分:0 
程序中的P虽然指向的是数组中的地址,但是指针p也是指向二元数组的元素

C种的自学者
2011-08-04 00:02
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
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
嗯~~ 不是。
你运行下面的代码看看
程序代码:
#include <stdio.h>

int main(int argc, char* argv[]) {
    int a[10], * p = &a[1];
    printf("(int) p - (int) a = %d\n", (int) p - (int) a);
    printf("p - a = %d\n", p - a);
    return 0;
}
2011-08-04 21:32
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.017282 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved