【发布时间】:2019-04-05 17:29:02
【问题描述】:
在下面的代码中,我试图实现一个函数来查找给定数组的最大值和最小值。但我试图使用不同的方法。我试图将指针的内存地址更改为最大值和最小值。
为什么这不起作用?我应该使用指针来解决这个问题吗?
#include <stdio.h>
#define M 5
void maxMin(int *v, int N, int *max, int *min){
int i;
printf("%d\n",*v);
printf("%d\n",*max);
for(i = 0; i < M; i++){
if(*max < *(v+i)){
max = (v+i);
}
if(*min > *(v+i)){
min = (v+i);
}
}
}
int main(){
int v[M] = {1, 3, 5, 7, 8}, *max=v, *min=v;
maxMin(v, M, max, min);
printf("MAX %d\n", *max);
printf("MIN %d\n", *min);
return 0;
}
【问题讨论】:
-
max指向数组。当你传递max时,你传递了一个指针。该函数接收该指针的副本。当您在函数内部修改它时,调用者将看不到它。要修改指针并让调用者看到它,请传递一个“双指针”,即指针的地址。 -
这与您的问题无关,但是您的代码中的参数 N 和全局宏 M 之间存在一些混淆。在您的示例中它不会导致任何问题,因为它们是相同的,但 maxMin 应该在其正文中引用“N”而不是“M”。
-
请记住,C 传递参数按值,这意味着函数内部的参数变量是副本。并且修改副本不会修改原始文件。请做一些关于在C中模拟通过引用传递的研究。