CS-APP:Section 5.1,Memory aliasing :看上去逻辑一样,执行结果一样吗?

以下是一段代码,在表面上是相同的结果和逻辑,但在xp = yp时,会有不同的结果;

 1  void  twiddle1( int   * xp, int   * yp)
 2  {
 3       * xp  +=   * yp;
 4       * xp  +=   * yp;
 5  }
 6 
 7  void  twiddle2( int   * xp, int   * yp)
 8  {
 9       * xp  +=   2 *   * yp;
10  }

 

 

 

测试代码:

 1  /*
 2   ============================================================================
 3   Name        : test1.c
 4   Author      : Gump Yin
 5   Version     :
 6   Copyright   : Your copyright notice
 7   Description : Hello World in C, Ansi-style
 8   ============================================================================
 9    */
10 
11  #include  < stdio.h >
12  #include  < stdlib.h >
13 
14  void  twiddle1( int   * xp, int   * yp)
15  {
16       * xp  +=   * yp;
17       * xp  +=   * yp;
18  }
19 
20  void  twiddle2( int   * xp, int   * yp)
21  {
22       * xp  +=   2 *   * yp;
23  }
24 
25  int  main( void ) {
26       int  a  =   1 ,b  = 2 ;
27      twiddle1( & a, & b);
28      printf( " twiddle1 xp != yp :a = %d;b= %d\n " ,a,b);
29      a  =   1 ;b  = 2 ;
30      twiddle2( & a, & b);
31      printf( " twiddle2 xp != yp :a = %d;b= %d\n " ,a,b);
32       int  c  =   3 ;
33      twiddle1( & c, & c);
34      printf( " twiddle1 xp == yp :c = %d\n " ,c);
35      c  =   3 ;
36      twiddle2( & c, & c);
37      printf( " twiddle2 xp == yp :c = %d\n " ,c);
38       return  EXIT_SUCCESS;
39  }
40 

 

 

测试结果:

1  twiddle1 xp  !=  yp :a  =   5 ;b =   2
2  twiddle2 xp  !=  yp :a  =   5 ;b =   2
3  twiddle1 xp  ==  yp :c  =   12
4  twiddle2 xp  ==  yp :c  =   9
5 

 

 

你可能感兴趣的:(memory)