數組指針示例2

  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 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章