关于一个C语言函数指针的问题~
下面fun函数功能是找出一维整型数组元素中最小的值和它所在的下标,最小的值和它所在的下标通过形参传回。数组元素的值已在主函数中赋予。min存放最小值,d存放最小值所在元素...
下面fun函数功能是找出一维整型数组元素中最小的值和它所在的下标,最小的值和它所在的下标通过形参传回。数组元素的值已在主函数中赋予。min存放最小值,d存放最小值所在元素的下标。我想问一下为什么黑括号里的编写方法是错误的。void fun(int b[],int n,int *min,int *d){int i;*min=b[0];【min=b;】*d=0;for(i=0;i<n;i++){if(b[i]<*min){*min=b[i];*d=i;【去掉】}}【d=min;】}谢谢哈~
展开
3个回答
展开全部
你对指针的概念理解不够。
调用例子如下:
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);
调用例子如下:
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);
展开全部
因为min指向的地址在主函数中是确定的 你不能再将其他地址赋值给它 后面的同理
比如:
void main()
{
int a[2]={0,1},b,c;
fun(a,2,&b,&c);
}min的指向就是b的地址,你不能再给它赋其它的地址
比如:
void main()
{
int a[2]={0,1},b,c;
fun(a,2,&b,&c);
}min的指向就是b的地址,你不能再给它赋其它的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
【min=b;】这样的话,你是把b数组的地址给min了。这样到后面找到最小值后,把值给min时就会把原来的数组的内容给改了。可以用const来限定它只能指向实参传给的地址,在此函数内不能重新指向其他地址。如一楼回复的:fun(const int b[],int n,const int *min,const int *d);
【d=min】跟上面的一样了。
【d=min】跟上面的一样了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询