int a[3];
int *j;
a[0]=90;
a[1]=91;
a[2]=92;
j=a;
printf("%d",*j);
printf("%d",&a[0])
printf("%d",&a[1]);
printf("%d",*(j+2));
這裏指針變量j
指向a[0]
,這是90操作;和a[0]
地址是-20是我的機器上。所以j
是-20。 而a[1]
的地址是-18。所以要獲得下一個變量,我應該使用*(j+2)
。因爲j+2
將導致-18。但這實際上正在進行。要訪問a[1]
。我必須使用*(j+1)
。但j+1=-19
。爲什麼j+1
導致-18?添加上指針
'和[0]的地址是-20 ...' - 地址不會是負數...地址是無符號的。 –
你給整數指針賦值了整數數組地址a的值,它是一個常量整數指針。一個[0]相當於*(a + 0),這顯然是一個整數,而不是一個整數指針。 – ChuckCottrill
'*(x + y)'完全等價於'x [y]'(或'y [x]')。所以要打印'a [1]',你需要'*(j + 1)'(或者只是'j [1]')。 –