C中的指针和地址

Moh*_*hit 1 c pointers programming-languages

以下代码操作指向同一位置的指针; 我很困惑为什么当我运行代码时,输​​出没有显示值重合.

#include "stdio.h"  
main()  
{  
int i=3,*x;  
float j=1.5,*y;  
char k='c',*z;  

x=&i;  
y=&j;  
z=&k;  

printf("\nAddress of x= %u",x);  
printf("\nAddress of y= %u",y);  
printf("\nAddress of z= %u",z);  

x++;  
y++;y++;y++;y++;  
z++;  

printf("\nNew Address of x= %u",x);  
printf("\nNew Address of y= %u",y);  
printf("\nNew Address of z= %u",z);  

printf("\nNew Value of i= %d",i);  
printf("\nNew Value of j= %f",j);  
printf("\nNew Value of k= %c\n",k);  
}  
Run Code Online (Sandbox Code Playgroud)

输出:

地址x = 3219901868
地址y = 3219901860
地址z = 3219901875
新地址x = 3219901872
新地址y = 3219901876
新地址z = 3219901876
新值i = 3
新值j = 1.500000
新值k = C

变量y和z的新地址相同.两个变量如何具有相同的地址,并且具有不同的值?注意:我在Ubuntu 9.04上使用了gcc编译器

Tal*_*man 12

您打印的不是x/y/z的地址,而是它们指向的地址.然后,通过修改指针(使用++),最终得到y和z指向内存中的相同地址.

关于值 - 首先你应该注意到你实际上没有改变j和k的值,并且当你打印这些值时,指针不再指向它们.

第二件事是,即使你确实打印了指针指向的值,你仍然会得到一个不同的值,因为在一种情况下,数据将被解释为浮点数,而另一种情况则被解释为char.