编译器正好把变量p放在了变量b的后面#include<stdio.h>
int main()
{
char a=0,b=0;
int *p=(int *)&b;
printf("首先\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
//*p=258;
*p=0x12345678;
printf("之后\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
return 0;
}
首先
a:0 b:0
a:0xffffcc17 b:0xffffcc16 p:0xffffcc16
之后
a:86 b:120
a:0xffffcc17 b:0xffffcc16 p:0xffff1234
这个1234就是这句导致的
*p=0x12345678;
#include<stdio.h>
int main()
{
char a=0,b=0;
int *p=(int *)&b;
printf("首先\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
//*p=258;
*p=0xabcd5678;
printf("之后\na:%d b:%d\n",a,b);
printf("a:%p b:%p p:%p\n",&a,&b,p);
return 0;
}
首先
a:0 b:0
a:0xffffcc17 b:0xffffcc16 p:0xffffcc16
之后
a:86 b:120
a:0xffffcc17 b:0xffffcc16 p:0xffffabcd
变成abcd了
|