现在的位置: 首页 > 综合 > 正文

初识指针2

2017年09月22日 ⁄ 综合 ⁄ 共 935字 ⁄ 字号 评论关闭

今天学习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时,我误删了最后一行的*,结果它又正常运行,这是为什么呢?

【上篇】
【下篇】

抱歉!评论已关闭.