赞
踩
何为指针?指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
例如:
- int *p; //* 表示指针说明符:说明变量p是一个指针,只会在定义变量的时候出现
-
- int a;
-
- p = &a; // &符号表示取a的地址,如果a是数组p=a,表示数组的首地址
-
- a=5; // *p = 5; *代表指针运算符,访问对应地址里面的内容
今天要说的是,两个变量之间的交换,用普通的变量和指针有何不同?先来看下面的一个例子:
这里提一下,关于交换变量的几种方法,详见C语言交换变量方法,这里就不再重复了。
- #include<stdio.h>
-
- void swap(int x,int y){
- //交换前的x,y
- printf("x,y交换前: x = %d,y = %d\n",x,y);
- x^=y;
- y^=x;
- x^=y;
- //交换后的x,y
- printf("x,y交换后: x = %d,y = %d\n",x,y);
- }
-
- int main(){
- int a=9,b=2;
- //交换前的a,b
- printf("a,b交换前: a = %d,b = %d\n",a,b);
- swap(a,b);
- //交换后的a,b
- printf("a,b交换后: a = %d,b = %d\n",a,b);
- }
相信大家都很明白,这个方法无非就是交换a,b两个变量的值,但是,结果是怎样呢?
x,y的值发生了交换,但是a,b的值并未发生交换,这是因为我们只是将a,b的值作为一个参数传递到swap中,我们改变的只是函数swap里面的数据,若是要使a,b两个变量的值交换,需要怎么做呢?
这里,就要用到我们的指针了,其实,两个对比之后你会发现,代码几乎没变,只是之前是传入a,b的值,现在传的是a,b的地址。
- #include<stdio.h>
-
- void swap(int *x,int *y) {
- printf("x,y交换前: x = %d,y = %d\n",*x,*y);
- *x^=*y;
- *y^=*x;
- *x^=*y;
- printf("x,y交换后: x = %d,y = %d\n",*x,*y);
- }
-
- int main() {
- int a=9,b=2;
- printf("a,b交换前: a = %d,b = %d\n",a,b);
- swap(&a,&b);
- printf("a,b交换后: a = %d,b = %d\n",a,b);
- }
接下来,来看看它的结果:
其实,这也不难理解,毕竟我传的是一个地址过去,地址里面的值发生改变,但是我a,b的地址并没有变,所以说a,b的值就也发生改变了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。