首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针减指针的有关问题

2012-03-21 
指针减指针的问题char*a,*ba123456 b123456789 printf( %d\n%d\n ,&a,&b)printf( %d\n ,b-a

指针减指针的问题

        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呢?



[解决办法]
/* 能猜出来b-a肯定是strlen(a)+1 */

這個不是肯定。
[解决办法]
char a[] = "123456 ";
char b[] = "123456789 ";

[解决办法]
/* 能猜出来b-a肯定是strlen(a)+1 */
不要挑战编译器的极限,正常情况下是这样的,也不排除编译器做个什么特殊优化,把变量的位置变换一下. a,b是指针的指针,按照LZ的思维,程序相连的变量在分配内存时也连在一起,而在32位机器上,指针变量都是一个unsigned int,也就是占用四个字节,当然是4了,如果你在dos 622下编译,我敢肯定是2,在64位xp 中用64位编译器编译,我敢肯定是8
[解决办法]
printf( "%d\n%d\n ",a,b);
[解决办法]
printf( "%d\n%d\n ",a,b);

這樣就可以了。
[解决办法]
printf( "%d\n%d\n ",&a,&b);输出的是a,b变量的地址,也就是a,b在栈中的地址,printf( "%d\n%d\n ", a, b); 才是字符串的地址

热点排行