-1
下面的C程序C和指針操作問題
#include <stdio.h>
#include <stddef.h>
#define A 1
#define B 1
int main(){
int a[A], b[B];
ptrdiff_t delta;
printf("%p %p",&a+A,&b);
delta=&a+A-&b;
printf("\n* %td *\n",delta);
if ((&a+A)==&b) printf("\n==1.1");
if ((&a+A)-&b==0) printf("\n==1.2");
if (&a==&a) printf("\n==2");
return 0;
}
會產生這樣的結果:
0x7fff107d5454 0x7fff107d5440
* 5 *
==2
你能EHY 0x7fff107d5454-0x7fff107d5440=5
解釋我?
'&a'是一個'int(*)[A]',即一個指向大小爲「A」的數組的指針,而不是指向int的指針。數組衰減爲指向其第一個元素的指針,所以'a + A'或'&a [0] + A'是等價的,並且會以'A * sizeof(int)'增量。 –
[Pointer subtraction confusion]的可能重複(http://stackoverflow.com/questions/3238482/pointer-subtraction- confusion) –