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 

 

 

posted @ 2010-04-07 23:33  Freedom  阅读(531)  评论(0编辑  收藏  举报