指针减指针的问题
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); 才是字符串的地址