/******************************************************/
/**************---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;
}
【c程序】用指针交换两数的值
最新推荐文章于 2023-10-31 19:29:53 发布