作用1:操作其他函数的变量
也就是说,把变量变成地址(门牌号),不再是单单传递变量,而是从根上传递地址,地址不会变。
例子:swap函数交换数据
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void swap(int* p1, int* p2);
int main()
{
int a = 10;
int b = 20;
swap(&a,&b);
printf("%d,%d\n",a,b);
}void swap(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
作用2:返回多个值
多个值被需要的情况下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void MaxandMin(int a[], int len, int* max, int* min);
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9 };
int len = sizeof(a) / sizeof(int);int max = a[0];
int min = a[0];MaxandMin(a, len, &max, &min);
printf("%d,%d",max,min);
}void MaxandMin(int a[],int len,int* max,int* min)
{
*max = a[0];
for (int i=1; i < len; i++)
{
if (a[i] > *max)
{
*max = a[i];
}
}*min = a[0];
for (int i=1; i < len; i++)
{
if (a[i] < *min)
{
*min = a[i];
}
}
}
作用3:利用指针将函数的结果和状态分开
定义一个变量来接收返回值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 10;
int b = 9;
int c = 0;
int g = getR(a, b, &c); //用g来接收
if (g ==66)
{
printf("没有余数");
}
else
{
printf("%d",c);
}}
int getR(int a,int b,int* c)
{
if (b==0)
{
return 66;
}
*c = a % b;
return 88;
}
指针的本质是用地址来代替变量