| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 768 人关注过本帖
标题:关于数组指针地址一问
只看楼主 加入收藏
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:7 
关于数组指针地址一问
书上说 a[4] = *(a+4),a[4]-a[3]=1。但为什么我把数组的指针地址输出后,相隔并不是1,而是4的呢?

程序代码:
# include <stdio.h>  
  
int main(void)  
{  
    int a[5];  
    int i;  
  
    for (i=0; i<5; i++)  
    {  
        printf("%#X\n", &a[i]); //无论是 %d 还是定义成其他类型输出,都是相隔4,但为何 a[4]-a[3]=1 ? 
    }  
  
    printf("\n");  
  
    return 0;  
}

输出结果:
程序代码:
0X12FF34  
0X12FF38  
0X12FF3C  
0X12FF40  
0X12FF44



搜索更多相关主题的帖子: 指针 地址 
2010-02-24 21:18
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:10 
注意到在VC中,int数据占4个字节,你输出的是a[i]的地址值,所以每个值都是相隔4。但是C规定,两个地址之差,结果是其之间相隔的数据的个数:所以:&a[4]-&a[3]=(0X12FF44-0X12FF40)/ sizeof(int) =1
这与a+1是a[1]的地址类似。不是a[0]的地址值
加上1.

2010-02-24 21:37
幸运之星
Rank: 4
来 自:吉林
等 级:业余侠客
帖 子:275
专家分:239
注 册:2009-6-5
收藏
得分:0 
因为int 型的 是需要4个字节
2010-02-24 21:38
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
以下是引用kwxx在2010-2-24 21:37:24的发言:

注意到在VC中,int数据占4个字节,你输出的是a的地址值,所以每个值都是相隔4。但是C规定,两个地址之差,结果是其之间相隔的数据的个数:所以:&a[4]-&a[3]=(0X12FF44-0X12FF40)/ sizeof(int) =1
这与a+1是a[1]的地 ...

那么如此类推: *(a+1) =a[1] = (0X12FF40) + sizeof(int)*1 =地址为:0X12FF44 的值?

[ 本帖最后由 lixnkei 于 2010-2-24 22:12 编辑 ]


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-02-24 22:11
kwxx
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:309
专家分:913
注 册:2009-5-11
收藏
得分:0 
你等式中混淆了地址和数组元素:
*(a+1) =a[1]   <--这是数组元素
   对应的a[1]的地址值 = a[0]的地址值+ sizeof(int)*1 = (0X12FF40) + sizeof(int)*1 = 0X12FF44  <--这是数组元素的地址
2010-02-24 22:22
幸运之星
Rank: 4
来 自:吉林
等 级:业余侠客
帖 子:275
专家分:239
注 册:2009-6-5
收藏
得分:0 
*(a+1) =a[1]   <--这是数组元素
你可以理解为 把a【1】中的值给整形指针(a+1)所指向的地址赋值
嘿嘿
2010-02-24 22:27
lixnkei
Rank: 4
来 自:樱之国度
等 级:业余侠客
帖 子:133
专家分:227
注 册:2008-5-13
收藏
得分:0 
呵呵,明白了,谢谢楼上几位。


老师说:会写代码的人多如牛毛,但写得很规范的却不多。代码要规范,养成好习惯~!
2010-02-24 22:33
幸运之星
Rank: 4
来 自:吉林
等 级:业余侠客
帖 子:275
专家分:239
注 册:2009-6-5
收藏
得分:0 
不用客气 嘿嘿
我起到的作用 只是指点一下
楼上那位起到的是帮助你这个 有分别

如果你看懂我的那个解释
看来编程的大门还是有希望的

因为我表达的语言能力不是很强的呵呵
2010-02-24 23:10
快速回复:关于数组指针地址一问
数据加载中...
 
   



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

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