| 
 | 
 
 
发表于 2020-5-19 00:51:21
|
显示全部楼层
 
 
 
编译器正好把变量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了 
 |   
 
 
 
 |