初识指针2

今天学习c语言指针部分,又发现一个好好玩的现象,记录下来,以后可以翻阅提醒自己别犯错


#include<stdio.h>
#include<stdlib.h>

void swap(int *p1,int *p2)
{
   int p = *p1;
	*p1 = *p2;
	*p2 = p;

}
void swap2(int *p1,int *p2)
{
 
	int *p;
	p = p1;
	p1= p2;
	p2 = p;
}
void swap3(int *p1,int *p2)
{
<span style="white-space:pre">	</span>
   int *p = *p1;
   *p1 = *p2;
   *p2 = *p;


}
void swap4(int *p1,int *p2)
{
   int m;
   int *p = &m;
   *p = *p1;
   *p1 = *p2;
   *p2 = *p;


}
void swap5(int *p1,int *p2)
{
   int *p = *p1;
<span style="white-space:pre">	</span>*p1 = *p2;
<span style="white-space:pre">	</span>*p2 = p;


}
void main()
{
  int a,b;
  int *point1,*point2;
  point1 = &a;
  point2 = &b;

  scanf("%d,%d",&a,&b);
  if(a < b)
  {
   swap(point1,point2);
   //swap2(point1,point2);
  }

  printf("\n %d,%d",*point1,*point2);
  system("pause");
}
调用swap时,值生效了,调用swap2时值没有生效,刚开始好诧异,这是为什么呢?同样传地址过去

后来再仔细看一遍,想了一下,原来,swap是把地址里面的内容交换了,swap2是把指针换了一个位置,但是里面的内容并没有交换,这应该是初学者比较容易犯2的地方吧,以后要小心。

swap3感觉很正常,就是一个交换的函数,编译也是通过的,可是运行时就出错了。这是为啥呢?

原来一个指针声明时是需要初始化的,需要使用者明确告诉它需要指向哪里,所以swap4可以先声明一个int 类型的变量,让指针指向它,这样就可以正确运行了。

但是又有一个疑惑的地方,在swap5时,我误删了最后一行的*,结果它又正常运行,这是为什么呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值