关于一个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;】}谢谢哈~ 展开
 我来答
maohuiabc
2012-05-13 · TA获得超过197个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:144万
展开全部
你对指针的概念理解不够。
调用例子如下:
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);
yi_yi901
2012-05-17 · TA获得超过230个赞
知道小有建树答主
回答量:286
采纳率:100%
帮助的人:185万
展开全部
因为min指向的地址在主函数中是确定的 你不能再将其他地址赋值给它 后面的同理
比如:
void main()
{
int a[2]={0,1},b,c;
fun(a,2,&b,&c);
}min的指向就是b的地址,你不能再给它赋其它的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hbc7025
2012-05-18 · TA获得超过340个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:124万
展开全部
【min=b;】这样的话,你是把b数组的地址给min了。这样到后面找到最小值后,把值给min时就会把原来的数组的内容给改了。可以用const来限定它只能指向实参传给的地址,在此函数内不能重新指向其他地址。如一楼回复的:fun(const int b[],int n,const int *min,const int *d);
【d=min】跟上面的一样了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式