免费注册 查看新帖 |

Chinaunix

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

地址相减的结果? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2007-05-23 15:20 |只看该作者
可以阿!不过value没有定义,要是定义为int,值为2!刚编译通过了!

论坛徽章:
0
42 [报告]
发表于 2007-05-23 20:44 |只看该作者
原帖由 cobras 于 2007-5-15 13:18 发表
通过指针相减来求元素个数具有不可移值性。
因为其结果有可能是错误的。LZ的例子是一个,另一个是内存模型(如:DOS编程)


如果指针都指向同一个数组对象中的元素,这样的指针相减运算是有定义的,当然用来求两个指针之间的元素个数也是可移植的。

论坛徽章:
0
43 [报告]
发表于 2007-05-23 20:53 |只看该作者
原帖由 beepbug 于 2007-5-20 09:40 发表
1)指针相减不等于地址相减。
2)如果指针指向一个数组,则指针可以加减一个整数,这表示指针在数组里的移动。两个都指向同一数组的指针,可以相减。
3)指针相减,具有可移植性。但是,有一个前提,你得把指针看作是指针。如果你把指针看作是地址,那它就没有可移植性。


根据标准的规定,&a 表达式的含义是计算 a 的地址(address),它的结果也是一个指针(pointer)。在语言层面上说某一个对象的地址的时候,它不单具有一个具体的地址值,还总是伴随着这个对象的类型,所以地址其实等同于指针。

第 3 条有些唯心。

论坛徽章:
0
44 [报告]
发表于 2007-05-23 23:05 |只看该作者
原帖由 accelerator 于 2007-5-20 20:15 发表
有点不明白:
如果因为边界对齐问题会导致崩溃, 那下边的结构体定义肯定是非法
#pragma pack(1)
struct s {
         char c;
         int i;
};
i完全可能不在一个对齐的地址上.

个人觉得, 指针减法并 ...


有谁来回答我的疑问, THX.

论坛徽章:
0
45 [报告]
发表于 2007-05-24 09:20 |只看该作者
原帖由 kuaizaifeng 于 2006-8-17 17:21 发表


为啥不让相加??

得到的是一个没有意义 的常数撒~~~

MAY BE ~:wink::wink:
hehed 该用户已被删除
46 [报告]
发表于 2007-05-24 13:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
47 [报告]
发表于 2007-05-24 14:09 |只看该作者
LZ的程序怎么没有意义?

对齐与否在程序中根本没有体现出来(没有使用志向的内容)。

两个指针减GCC+就是做如下操作

value = ((char*)p2 - (char*)p1) / sizeof(int);

其他什么也没有。因此总是有意义的。

你将指针看成普通数字就可以了。

论坛徽章:
0
48 [报告]
发表于 2007-05-24 14:29 |只看该作者
当成普通数字看就可以了



  1. main()
  2. {
  3. int *p1;
  4. int *p2;
  5. int value;

  6.   p1 = (int *)0x500;
  7.   p2 = (int *) 0x501;
  8.   value = p2-p1;
  9.   printf("value=%d \n",value);

  10.   p1 = 3;
  11.   p2 = 5;
  12.   p2 = (int)p1 + (int)p2;
  13.   printf("p2 = %d\n", p2);

  14.   p1 = 5;
  15.   p2 = 4;
  16.   p2 = (int)p1*(int)p2;
  17.   printf("p2 = %d\n", p2);

  18. }


复制代码

论坛徽章:
0
49 [报告]
发表于 2007-05-24 15:51 |只看该作者
在低档单片机开发中,譬如在C51上开发,可以把指针等同于地址。
在其它场合,把指针当作地址,可能会有麻烦。

论坛徽章:
0
50 [报告]
发表于 2007-05-28 19:01 |只看该作者
指向一段连续内存的字符串指针是可以加的吧

[ 本帖最后由 guojkd 于 2007-5-28 20:03 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP