【c程序】用指针交换两数的值

来源:互联网 发布:淘宝拍摄工作室 编辑:程序博客网 时间:2024/06/04 23:43
/******************************************************//**************---About   Pointer--------**************//**************---Author: Tibruce Zhao---**************//**************---Date:   2015/8/31------**************//******************************************************/ #include<stdio.h>char *func(){char a='#';return &a;//不要返回普通局部变量的地址}void f1(int *p,int *q)  {int *t=p;p=q;q=t;}void f2(int *p,int *q)  {int t=*p;*p=*q;*q=t;}void f3(int  a,int  b)  {int t=a;a=b;b=t;}void show(double k[],int n){double x=123.45;printf("sizeof k=%d\n",sizeof(k));//地址都是四个字节k=&x;printf("*k=%g\n",*k);}void print(double *p,int n){int i;for(i=0;i<n;i++)printf("%g ",p[i]);printf("\n");}int main(){char c='@';char *p=&c;*p='$';printf("c=%c\n",c);printf("*p=%c\n",*p);p=func();//指向一个可能已经释放的地方,悬空指针printf("c=%c\n",c);printf("p=%c\n",*p);//输出可能不是‘#’了printf("********第二期************\n");int a=10,b=20;int *m=&a,*n=&b;int t=*m;*m=*n;*n=t;printf("a=%d,b=%d\n",a,b);//a和b交换值int mm=10,nn=20;int *u=&mm,*v=&nn;int *w=u;u=v;v=w;//mm和nn不交换值,只是改变了指针的方向,没有对目标进行操作,目标总是要带'*'。printf("mm=%d,nn=%d\n",mm,nn);f1(&mm,&nn);printf("mm=%d,nn=%d\n",mm,nn);//没有交换f2(&mm,&nn);printf("mm=%d,nn=%d\n",mm,nn);//交换了f3( mm, nn);printf("mm=%d,nn=%d\n",mm,nn);//不会交换//************************************************************///***********|    虚拟地址-—->内存地址--->物理内存       |********///************************************************************/printf("********第三期************\n");double k[5]={1.1,2.2,3.3,4.4,5.5};show(k,5);//数组名就是一个地址print(k,5);return 0;}

0 0
原创粉丝点击