1.利用函数来修改不止一个变量
自定义交换函数——swap()函数,利用值的交换,无法达到所要得结果。如下:
但是在swap()函数中换上指针,就可以把函数中交换的值应用到main()函数中。
#include <stdio.h>
void swap(int *a, int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int main(void) {
int a = 5;
int b = 6;
swap(&a, &b);
printf("a:%d b:%d", a, b);
}
但是如果不用swap()函数的话,则没有太大的影响,都能得到想要的结果。如下两种写法,均可。
#include <stdio.h>
int main(void) {
int a = 5;
int b = 6;
int t = a;
a = b;
b = t;
printf("a:%d b:%d", a, b);
}
#include <stdio.h>
int main(void) {
int a = 5;
int b = 6;
int *pa = &a;
int *pb = &b;
int t = *pa;
*pa = *pb;
*pb = t;
printf("a:%d b:%d", a, b);
}
2.利用函数返回多个值。
#include <stdio.h>
void fun(int* p1, int* p2)
{
*p1 = 0;
*p2 = 1;
}
int main(void) {
int a, b;
int *p1 = &a;
int *p2 = &b;
fun(p1, p2);
printf("a:%d b:%d", a, b);
}
如果不用指针,则会报错如下:
又如以下例子使用指针:
(它需要返回一个值,又要传出一个在main函数中需要用到的值。)
#include <stdio.h>
//该函数需要返回一个ret,又要传出除法的结果result
int divide(int a, int b,int *result)
{
int ret = 1;
if (b == 0)ret = 0;
else{
*result = a / b;//所以要传出的值在这里使用指针
}
return ret;
}
int main(void) {
int a = 5;
int b = 2;
int c;
if (divide(a,b,&c)) {
printf("%d/%d=%d\n", a, b, c);
}
}
若直接使用int result,而不使用指针,result结果(c)则不会被传出,编译器则会报错。