| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:求解为什么两个地址相减后并非实际变量的地址值的差
只看楼主 加入收藏
lfe_bccn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-7-1
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
求解为什么两个地址相减后并非实际变量的地址值的差
现有疑问,实在是想不明白,烦请各位指教一下。
代码:
#include "iostream.h"
void main()
{
    static char a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    char *p;
    for(p=a[0];p<a[0]+12;p++)
    {
         cout<<p-a[0]<<endl;
         cout<<p<<endl;
         cout<<a[0]<<endl;
    }
}
执行结果(部分):
0
0x0042D710
0x0042D710
1
0x0042D714
0x0042D710
2
0x0042D718
0x0042D710

疑问:p是0x0042D714,a[0]是0x0042D710时,p-a[0]的值为1,为什么不是4?
如果p和a[3][4]更改为char型,并且a[3][4]={'1','2','3','4','5','6','7','8','9','a','b','c'},执行结果(部分)如下所示,为什么p-a[0]的值仍然不变?
0
123456789abc
123456789abc
1
23456789abc
123456789abc
2
3456789abc
123456789abc
3
456789abc
123456789abc
搜索更多相关主题的帖子: include 
2014-07-17 11:38
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
p++

DO IT YOURSELF !
2014-07-17 11:44
lfe_bccn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-7-1
收藏
得分:0 
回复 2 楼 wp231957
p值的改变我明白,不明白的是p-a[0]的值。如果您知道,麻烦详述,谢谢!
2014-07-17 11:57
隼hayabusa
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2014-7-17
收藏
得分:10 
p指向数组元素时,p-a[0]表示的是p和a[0]间数组元素的个数(也包括a[0]),至于内存,根据编译器而定!
2014-07-17 14:12
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用lfe_bccn在2014-7-17 11:57:43的发言:

p值的改变我明白,不明白的是p-a[0]的值。如果您知道,麻烦详述,谢谢!


p++不就相当于p=p+1  所以他们的差恒定不变  就形成了你例子中的 0 1 2 3 ......

DO IT YOURSELF !
2014-07-17 14:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
具体可见这个例子:

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

int main(void)
{
    char a[]="test";
    char* p=a;
    printf("add:%x  cont:%4s    %4d\n",  p,p,p-&a[0]);
    printf("add:%x  cont:%4s    %4d\n",++p,p,p-&a[0]);
    printf("add:%x  cont:%4s    %4d\n",++p,p,p-&a[0]);
    return 0;
}     

DO IT YOURSELF !
2014-07-17 14:52
lfe_bccn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-7-1
收藏
得分:0 
以下是引用隼hayabusa在2014-7-17 14:12:16的发言:

p指向数组元素时,p-a[0]表示的是p和a[0]间数组元素的个数(也包括a[0]),至于内存,根据编译器而定!
谢谢!
2014-07-17 16:19
lfe_bccn
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-7-1
收藏
得分:0 
以下是引用wp231957在2014-7-17 14:49:12的发言:

 
 
p++不就相当于p=p+1  所以他们的差恒定不变  就形成了你例子中的 0 1 2 3 ......
谢谢您!原来可以不用去考虑p所指向的内存地址值。

[ 本帖最后由 lfe_bccn 于 2014-7-17 16:25 编辑 ]
2014-07-17 16:22
快速回复:求解为什么两个地址相减后并非实际变量的地址值的差
数据加载中...
 
   



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

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