关于一个C语言函数指针的问题~

2025-05-14 12:13:32
推荐回答(3个)
回答(1):

你对指针的概念理解不够。
调用例子如下:
int array[10];
int min_real;
int d_real;
fun(array,10,&min_real,&d_real);
这个例子中,min_real是实际的int变量,用于返回最小值,d_real用于返回下标。
调用时,会将min_real的地址赋值给一个指针变量min,这是min是fun函数的局部变量,保存min_real的地址,而你的min=b这句改变min变量保存的地址,对min_real有影响吗?显然没有啊!我们的目标是改变min_real,而改变min_real的方式就是使用min_real的地址找到它,再对它赋值,使用*min=b[i]可以实现这一目标,是因为min这变量保存的是min_real的地址。
d同理不再缀述。
为了防止你这类错误,一般这种函数要使用const,声明为:
fun(const int b[],int n,const int *min,const int *d);

回答(2):

因为min指向的地址在主函数中是确定的 你不能再将其他地址赋值给它 后面的同理
比如:
void main()
{
int a[2]={0,1},b,c;
fun(a,2,&b,&c);
}min的指向就是b的地址,你不能再给它赋其它的地址

回答(3):

【min=b;】这样的话,你是把b数组的地址给min了。这样到后面找到最小值后,把值给min时就会把原来的数组的内容给改了。可以用const来限定它只能指向实参传给的地址,在此函数内不能重新指向其他地址。如一楼回复的:fun(const int b[],int n,const int *min,const int *d);
【d=min】跟上面的一样了。