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

/******************************************************/
/**************---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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值