指针减指针的问题

csShooter 2007-07-31 08:53:06

char*a,*b;
a = "123456";
b = "123456789";
printf("%d\n%d\n",&a,&b);
printf("%d\n",b-a); /* 能猜出来b-a肯定是strlen(a)+1 */
-------------------------------------------

输出:
2293628
2293624
7
----------------


b-a 值为7可以理解。但为啥a的地址xx28减b的地址xx24只有4呢?

...全文
224 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuegao007 2007-07-31
  • 打赏
  • 举报
回复
这两个指针相减是没任何意义的,你做联系还可以。
指向同一元素的两个指针相减才有意义。
阿发伯 2007-07-31
  • 打赏
  • 举报
回复
printf("%d\n%d\n",&a,&b);输出的是a,b变量的地址,也就是a,b在栈中的地址,printf("%d\n%d\n", a, b); 才是字符串的地址
csShooter 2007-07-31
  • 打赏
  • 举报
回复
感谢楼上两位,正是我想要的结果!
lockhall 2007-07-31
  • 打赏
  • 举报
回复
printf("%d\n%d\n",a,b);

這樣就可以了。
星羽 2007-07-31
  • 打赏
  • 举报
回复
printf("%d\n%d\n",a,b);
csShooter 2007-07-31
  • 打赏
  • 举报
回复
看来需要学习的地方太多了!

printf("%d\n%d\n",&a,&b);
------------------------------
上面这句话其实我只想知道a的地址是多少,b的地址是多少?!


是不是有错?
superyys 2007-07-31
  • 打赏
  • 举报
回复
/* 能猜出来b-a肯定是strlen(a)+1 */
不要挑战编译器的极限,正常情况下是这样的,也不排除编译器做个什么特殊优化,把变量的位置变换一下. a,b是指针的指针,按照LZ的思维,程序相连的变量在分配内存时也连在一起,而在32位机器上,指针变量都是一个unsigned int,也就是占用四个字节,当然是4了,如果你在dos 622下编译,我敢肯定是2,在64位xp 中用64位编译器编译,我敢肯定是8
www_adintr_com 2007-07-31
  • 打赏
  • 举报
回复
char a[] = "123456";
char b[] = "123456789";
csShooter 2007-07-31
  • 打赏
  • 举报
回复
两个变量是紧跟着初始化地!!


中间没有定义其它变量。应该可以!
lockhall 2007-07-31
  • 打赏
  • 举报
回复
/* 能猜出来b-a肯定是strlen(a)+1 */

這個不是肯定。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧