指针的操作无非就是读写操作。
使用指针作为参数,可实现两种功能:
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版权协议,转载请附上原文出处链接和本声明。