为什么地址px+1
保持值为0.3? (在每次执行时)变量f
的值也为0.3,但它有另一个地址(px-1)!? (即使px+2
,px+3
和px-2
上的值保持值0.3 ......,当我将其打印出来时)
#include <stdio.h>
int main(){
int* px;
int i = 1;
float f= 0.3;
double d=0.005;
char c = '*';
px=&i;
printf("Values: i=%i f=%f d=%f c=%c\n",i,f,d,c);
printf("Addresses: i=%lX f=%lX d=%lX c=%lX\n",&i,&f,&d,&c);
printf("Pointer Values (size of int = %d):\n px=%lX; px+1=%lX; px+2=%lX; px+3=%lX\n",sizeof(int),px,px+1,px+2,px+3);
printf("Dereference: at px+1=%lX, value is:%f \n",px+1,*(px+1));
/* Output :
Values: i=1 f=0.300000 d=0.005000 c=*
Addresses: i=7FFF5C546BB4 f=7FFF5C546BB0 d=7FFF5C546BA8 c=7FFF5C546BA7
Pointer Values (size of int = 4):
px=7FFF5C546BB4; px+1=7FFF5C546BB8; px+2=7FFF5C546BBC; px+3=7FFF5C546BC0
Dereference: at px+1=7FFF5C546BB8, value is:0.300000
*/
}
答案 0 :(得分:2)
您有几个问题,都导致未定义的行为。首先,您应该使用"%p"
来打印指针,并且指针应该被转换为void *
以获得最大的兼容性。其次,取消引用超出范围的指针,就像你*(px + 1)
导致未定义的行为一样。第三,指针px
指向整数,但您尝试使用float
转换进行打印,这也会导致未定义的行为。
答案 1 :(得分:0)