指针作为函数的参数
1. 会使用指针间接的操作指针指向的变量。
指针的作用:通过指针间接的操作指针指向的变量。
2. 当函数的参数类型是 int、float、double、char的时候,这个时候参数的传递是值传递!
这个时候,在函数内部去修改形参变量的值,对实参没有丝毫的影响。
3. 当这个函数的参数类型是 数组的时候 ,这个时候参数传递是地址传递!
这个时候,在内部修改形参数组元素的时候,其实修改的就是实参数组的元素。
4. 指针是一种新的数据类型。
那么指针也可以作为函数的参数!
1)我们直接可以将指针的声明放在函数后面的小括弧里。此时指针就作为了函数的参数存在了。
2)当我们调用1个函数的时候,如果这个函数的参数是1个指针,那么我们就必须要为这个指针传递1个和指针类型相同的普通变量的地址。
3)这个时候,在函数内部去访问参数指针指向的变量的时候,其实访问的就是实参变量。
例:
void test(int *p)
{
*P = 1000;
}
int num = 10;
int *p = #
test(p); // 或者 test(&num);
printf(“num = %d\n”, num);
—> num = 1000;
说明:指针作为函数的参数,实参传递的过程是地址传递!
5. 指针作为函数的参数,可以实现什么效果?
函数的内部可以修改实参变量的值!
6. 什么时候需要将指针作为函数的参数?!
1)遇到的问题:
函数只能返回1个数据
如果函数需要返回多个数据怎么办?
2)解决方案
使用指针作为函数的参数,让调用者将自己的变量的地址传递到函数的内部,函数的内部通过指针就可以修改实参变量的值。
例:
int getMaxAndMin(int arr[], int len, int *min)
{
int max = INT32_MIN;
*min = INT32_MAX;
for(int i = 0 ; i < len ; i++)
{
if(arr[i] > max)
{
max = arr[i];
}
if(arr[i] < min)
{
*min = arr[i];
}
}
return max;
}
int main()
{
// 定义一个变量用来存储数组最小值
int min = 0;
// 定义一个指定数组
int arr[] = {12,3,22,49,3,294,3,2,8,45,82,34,0,4,28};
int max = getMaxAndMin(arr,sizeof(arr) / sizeof(int), &min);
printf(“max = %d\nmin = %d\n”, max, min);
return 0;
}
3)当函数需要返回多个数据的时候就可以使用指针作为函数的参数。
|
|