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.