1 #include<stdio.h>
2
3 char* func()
4 {
5 char a = '#';
6 return &a;//不要返回普通局部变量的地址!
7 }
8
9 void f1(int *p,int *q){int* t = p;p = q;q = t;}
10 void f2(int *p,int *q){int t = *p;*p = *q;*q = t;}
11 void f3(int a,int b){int t = a;a = b;b = t;}
12
13 void show(double a[],int n)//a看似数组 其实是指针
14 {15 double x = 123.45;
16 printf("sizeof a = %d\n",sizeof(a));
17 a = &x;
18 printf("*a = %g\n",*a);
19 }
20
21 void print(double *p,int n)
22 {
23 int i;
24 for(i = 0;i<n;i++)
25 printf("%g ",p[i]);
26 printf("\n");
27 }
28
29 int main()
30 {
31 double o[5] = {1.1,2.2,3.3,4.4,5.5,};
32 show(o,5);
33 print(o,5);
34
35 char c = '@';
36 char* p1 = &c;
37 *p1 = '$';
38 printf("c = %c\n",c);
39
40
41 printf("*p = %c\n",*p1);
42 printf("*p = %c\n",*p1);//输出可能不是‘#’了
43
44 int a = 10,b = 20;
45 //int t = a;a = b;b = t;
46 int x,y[5],*p = &a,*q = &b;
47 int t = *p;*p = *q;*q = t;
48 printf("a = %d,b = %d\n",a,b);
49 int m = 10,n = 20;
50 int *u = &m,*v = &n;
51 int*w = u;u = v;v = w;
52 printf("m = %d,n = %d",m,n);
53
54 f1(&m,&n);printf("m = %d,n = %d\n",m,n);//把复制过的地址做操作也没有影响
55 f2(&m,&n);printf("m = %d,n = %d\n",m,n);//对原始变量进行操作 所以有改变
56 f3(m,n);printf("m = %d,n = %d\n",m,n);//值传递都是复制品的传递
57 return 0;
58 }