指针作为函数的参数使用20190908

指针的操作无非就是读写操作。

使用指针作为参数,可实现两种功能:

1、可以读取上一层函数中的变量的值 *p ;

2、可以修改上一层函数中变量的值 *p ;(普通的参数无法实现)

#include <stdio.h>

void test(int* p)
{
	printf("before test:%d \n",*p);
	*p = 1;
	printf("now:%d \n",*p);
}

int main()
{
	int a=0;
	test(&a);

	return 0;
}

指针可以作为输出参数来使用:

#include <stdio.h>

void sum(int* a,int* b,int* out)
{
	int result = *a + *b ;

	*out = result ;
}

int main()
{
	int a=10;

	int b=11;

	int out=0;

	sum(&a,&b,&out);

	printf("%d \n",out);

	return 0;
}

指针既可以作为输入参数又可以作为输出参数:

#include <stdio.h>

//既是输入参数也是输出参数
void swap(int* a,int* b)
{
	int t=*a;
	*a=*b;
	*b=t;
}

int main()
{
	int a = 10;

	int b=11;

	swap(&a,&b);

	printf("a=%d,b=%d",a,b);

	return 0;
}

传递数组作为参数:

数组名:实质是一个指针类型,传递数组,就是传递指针。

#include <stdio.h>

int avg(int* p,int len)
{
	int sum =0;
	for(int i=0;i<len;i++)
	{
		sum=sum+p[i];
	}
	return sum;
}

int main()
{
	int arr[4]={1,2,3,4};

	int ret = avg(arr,4);

	printf("ret=%d\n",ret);

	return 0;
}

注意:此后称内存里存储的元素为“对象”。

以下2种写法等价:

1、int avg(int* p,int len);传递数组。

2、int avg(int p[],int len);在C和C++语言里面是没有长度信息的。

#include <stdio.h>

int avg(int* p,int len)
{
	int sum =0;
	for(int i=0;i<len;i++)
	{
		sum=sum+p[i];
	}
	return sum;
}

int main()
{
	int arr[4]={1,2,3,4};

	int ret = avg(arr,4);

	printf("ret=%d\n",ret);

	return 0;
}

指针有什么作用:可以返回多个值。

#include <stdio.h>

void max_min(int* p,int len,int* pmax,int* pmin)
{
	int _max=p[0];
	int _min=p[0];
	for(int i=0;i<len;i++)
	{
		if(p[i]>_max)
		{
			_max=p[i];
		}
		if(p[i]<_min)
		{
			_min=p[i];
		}
	}
	*pmax=_max;
	*pmin=_min;
}

int main()
{
	int arr[8]={1,3,6,2,6,0,9,7};

	int max;
	int min;

	max_min(arr,8,&max,&min);

	printf("max=%d,min=%d",max,min);

	return 0;
}

 


版权声明:本文为weixin_41211961原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。