免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dustman
打印 上一主题 下一主题

地址减去一个整数时会发生什么情况 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2005-08-07 10:20 |只看该作者

地址减去一个整数时会发生什么情况

晕,原来某人不懂16进制

论坛徽章:
0
22 [报告]
发表于 2005-08-07 11:06 |只看该作者

地址减去一个整数时会发生什么情况

[quote]原帖由 "luojiannx"]晕,原来某人不懂16进制 [/quote 发表:

我是说我第一眼直觉错了, 并非你说的不懂!

论坛徽章:
0
23 [报告]
发表于 2005-08-07 11:29 |只看该作者

地址减去一个整数时会发生什么情况

没说你呢
我都被dustman弄晕头了, 我这没一点问题, 怎么跑他那里就不是那么回事了,然后还说有时候正确有时候不正确. 我都不知道他说的什么意思了,作了个指针的加法,他说那减法呢?然后又说那个什么例子不能代表什么问题,我差点没疯掉. 他自己的贴子又不详细,什么都看不出来.唉,现在的人哪.

论坛徽章:
0
24 [报告]
发表于 2005-08-07 11:32 |只看该作者

地址减去一个整数时会发生什么情况

原帖由 "dustman" 发表:
#include <stdio.h>;
#include <netinet/ip.h>;
#include <netinet/tcp.h>;
#include <netinet/if_ether.h>;

int main()
{
        struct etherheader
        {
            struct ethhdr eth;
            st..........


你能贴出你得到2的结果吗?
&eh.ip 是地址常量,不能给&ep.ip赋地址吧
一般指针是存地址的变量。

指针运算才要考虑其基类型。
我觉得你这个问题应该是“地址值减去一个整数时会发生什么情况”
考虑。。。

论坛徽章:
0
25 [报告]
发表于 2005-08-07 12:27 |只看该作者

地址减去一个整数时会发生什么情况

[quote]原帖由 "seeLnd"]对于一个unsigned long *类型的-2结果一定是减少8的, 不可能会有错的(32位系统), 楼主是否可能用肉眼看错了, 至少我开始是看错了 , 以为bffff790 - bffff788 = 2 (应该=8) , 如果楼主坚持没有看错, ..........[/quote 发表:



等于“2”的程序在这个帖子第二页的第六楼两排/******/之间的那部分有打印

我稍微修改了一下打印提示信息

在我这里的打印结果如下:

the address of ip is 804a7ee
the address of tcp is 804a802
the address of ep.ip is 804a7f0
the address of ep.tcp is 804a804

第三行的值和第一行的值相差2
第四行的值和第二行的值相差2

论坛徽章:
0
26 [报告]
发表于 2005-08-07 12:30 |只看该作者

地址减去一个整数时会发生什么情况

得到“8”结果的源程序:
#include <stdio.h>;
#include <netinet/ip.h>;
#include <netinet/tcp.h>;
#include <netinet/if_ether.h>;

struct header
{
    struct ethhdr eth;
    struct iphdr  ip;
    struct tcphdr  tcp;
}header_buf;


int main()
{
    memset(&header_buf, 0, sizeof(header_buf));

    struct iphdr *ip;
    struct tcphdr *tcp;

    ip = (struct iphdr *)((unsigned long *)&header_buf.ip - 2);
    tcp = (struct tcphdr *)((unsigned long *)&header_buf.tcp - 2);

    printf("address of header_buf.ip is %x\n", &header_buf.ip);
    printf("address of header_buf.tcp is %x\n", &header_buf.tcp);

    printf("address of ip is %x\n", ip);
    printf("address of tcp is %x\n", tcp);

    return 0;
}


打印结果为:
address of header_buf.ip is 8049610
address of header_buf.tcp is 8049624
address of ip is 8049608
address of tcp is 804961c

第三行的值和第一行的值相差8
第四行的值和第二行的值相差8

我用的是red-hat linux,内核2.4.18,gcc 3.2

论坛徽章:
0
27 [报告]
发表于 2005-08-07 12:33 |只看该作者

地址减去一个整数时会发生什么情况

你不是都得到你想要的了么?

论坛徽章:
0
28 [报告]
发表于 2005-08-07 12:33 |只看该作者

地址减去一个整数时会发生什么情况

[quote]原帖由 "luojiannx" 发表:
没说你呢
我都被dustman弄晕头了, 我这没一点问题, 怎么跑他那里就不是那么回事了,然后还说有时候正确有时候不正确. 我都不知道他说的什么意思了,作了个指针的加法,他说那减法呢?然后又说那个什么例子不能代表什

论坛徽章:
0
29 [报告]
发表于 2005-08-07 12:35 |只看该作者

地址减去一个整数时会发生什么情况

[quote]原帖由 "luojiannx"]你不是都得到你想要的了么?[/quote 发表:


问题在于:

同样的两段程序,对同样的地址值减去2

为什么有时候得到的结果是跟原地址相比移动了2个字节

有时候却移动了8个字节呢?

论坛徽章:
0
30 [报告]
发表于 2005-08-07 12:36 |只看该作者

地址减去一个整数时会发生什么情况

你在什么地方下载的原程序,我去看看?
另外,你到底是想达到一个什么目的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP