案例一:
已知两个变量a,b,用C语言将他们的值进行交换?
在没有学习指针的是我们常规的思路是
#include <stdio.h>
void swap(int v1,int v2)
{
int temp;
printf("v1 = %d,v2 = %d\n",v1,v2);
temp = v1;
v1 = v2;
v2 = temp;
printf("v1 = %d,v2 = %d\n",v1,v2);
}
int main()
{
int a = 10,b = 4;
printf("Hello, World!\n");
printf("a = %d,b = %d\n",a,b);
swap(a,b);
printf("a = %d,b = %d\n",a,b);
return 0;
}
这里编译后执行的结果是:
Hello, World! a = 10,b = 4 v1 = 10,v2 = 4 v1 = 4,v2 = 10 a = 10,b = 4
可以看到a,b的值其实没有变化,交换的是v1与v2的值,那怎么样才能实现呢?这里我们用指针试一下,代码如下
#include <stdio.h>
void swap(int *v1,int *v2)
{
int temp;
temp = *v1;
*v1 = *v2;
*v2 = temp;
}
int main()
{
int a = 10,b = 4;
printf("Hello, World!\n");
printf("a = %d,b = %d\n",a,b);
swap(&a,&b);
printf("a = %d,b = %d\n",a,b);
return 0;
}
调试结果为:
Hello, World! a = 10,b = 4 a = 4,b = 10
这就达到了我们的目的,为什么?指针就是地址,我们传入了a,b变量的地址值,在swap函数里面改变了地址里面的值。
案例二:让函数Sum(int v1,int v2)返回和和差两个值
#include <stdio.h>
int Sum(int v1,int v2,int *p)
{
*p = v1-v2;
return v1+v2;
}
int main()
{
int a = 10,b = 4;
int sum,minus;
printf("Hello, World!\n");
sum =Sum(a,b,&minus);
printf("sum = %d,minus = %d\n",sum,minus);
return 0;
}
输出结果为:
Hello, World! sum = 14,minus = 6
一个函数实现返回两个值,这里我们用指针实现了,在函数内部修改函数外部某个值,定义参数指针,把变量地址传进去。
用指针,一个函数可以返回无限个值,一个默认返回,其他返回值通过指针的参数传递。