指针的应用场景:什么时候要用指针?

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)则不会被传出,编译器则会报错。
报错

猜你喜欢

转载自blog.csdn.net/weixin_52340203/article/details/114269407