链接地址:https://blog.csdn.net/tustyao/article/details/47061959
代码一:
#include <stdio.h>
int main
{
int b = 12;
int *p = &b; //指针变量p指向变量b
printf("%p\n",p);//指针p保存的b的地址
printf("%p\n",&p);
char a ='b';
printf("%p\n",&a);
int *p2 =&a; //int类型指针变量p2 指向char变量a
*p2=10000;
printf("%p\n",&p2);
printf("%p\n",p);
return 0;
}
代码结果:
可以看出前后指针p所保存的地址不相同。原因分析:
链接地址:https://www.cnblogs.com/chanabi/p/9228998.html
#include <stdio.h>
int main()
{
short c[2]; //等价于申请2个连续的内存空间,每个空间2字节
c[0] = 1; //为第一个short空间赋值为1
c[1] = 1; //为第二个short空间赋值为1
short *p1 = c; //p1指向c[]首地址
int *p2 = (int *)p1; //p2指向c[]首地址,并强制转换类型为 int
printf("p1指向:%p\np2指向:%p\n",p1,p2);
printf("p1取出:%d\np2取出:%d\n",*p1,*p2);
return 0;
}
其实,在每个地址中所存储的内容都是以二进制的方式存放的,指针P1和P2都是指向同一个首地址。但是指针P1是以(short*)的方式去读取,与开始定义的short c[2]的类型相同,所以能正常的读取出数据。但指针P2是以(int*)的方式去读取,从图中便可以看出“2个short=1个int”,所以取出的数据不是我们想要的结果。