关于指针在函数中变化的问题
从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原型如下所示:intFindMax(intnum[],intn,in...
从键盘任意输入10个整数,用指针变量作函数参数编程计算最大值和最小值,并返回它们所在数组中的位置。函数原型如下所示:
int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标
int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标
程序运行结果示例:
Input 10 numbers:
-1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0
---------------------------------------------------------------------------题目
我编的程序如下:
#include <stdio.h>
int FindMax(int num[],int n, int *pMaxPos);
int FindMin(int num[],int n,int *pMinPos);
int main(void)
{
int x=10;
int y=10;
int i;
int a[10];
int *ptr1=a;
int *ptr2=a;
printf("Input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
FindMax(a,x,ptr1);
FindMin(a,y,ptr2);
printf("%d",*ptr1);
printf("\n%d",*ptr2);
}
int FindMax(int num[],int n, int *pMaxPos)
{
int j,t1;
t1=num[0];
for(j=1;j<n;j++)
{
if(num[j]>=t1)
{
t1=num[j];
*pMaxPos=j;
}
}
printf("max point to %d\n",*pMaxPos);
return t1;
}
int FindMin(int num[],int n,int *pMinPos)
{
int i,t;
t=num[0];
for(i=1;i<n;i++)
{
if(num[i]<t)
{
t=num[i];
*pMinPos=i;
}
}
printf("min point to %d\n",*pMinPos);
return t;
}
-------------------------------------------------------------------------
并没有按照题目输出的格式,是因为想要搞清楚*pMinPos和*pMinPos在函数中到底发生了怎样的变化,为什么我运行出来的结果如下图?求大神帮忙把我的程序改错,让指针能够顺利地指向下标并在主函数里顺利地输出正确结果 展开
int FindMax(int num[], int n, int *pMaxPos);//函数返回最大值,pMaxPos返回最大值所在的下标
int FindMin(int num[], int n, int *pMinPos);//函数返回最小值,pMaxPos返回最小值所在的下标
程序运行结果示例:
Input 10 numbers:
-1 2 3 45 92 8 9 12 7 8↙
Max=92,Position=4,Min=-1,Position=0
---------------------------------------------------------------------------题目
我编的程序如下:
#include <stdio.h>
int FindMax(int num[],int n, int *pMaxPos);
int FindMin(int num[],int n,int *pMinPos);
int main(void)
{
int x=10;
int y=10;
int i;
int a[10];
int *ptr1=a;
int *ptr2=a;
printf("Input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
FindMax(a,x,ptr1);
FindMin(a,y,ptr2);
printf("%d",*ptr1);
printf("\n%d",*ptr2);
}
int FindMax(int num[],int n, int *pMaxPos)
{
int j,t1;
t1=num[0];
for(j=1;j<n;j++)
{
if(num[j]>=t1)
{
t1=num[j];
*pMaxPos=j;
}
}
printf("max point to %d\n",*pMaxPos);
return t1;
}
int FindMin(int num[],int n,int *pMinPos)
{
int i,t;
t=num[0];
for(i=1;i<n;i++)
{
if(num[i]<t)
{
t=num[i];
*pMinPos=i;
}
}
printf("min point to %d\n",*pMinPos);
return t;
}
-------------------------------------------------------------------------
并没有按照题目输出的格式,是因为想要搞清楚*pMinPos和*pMinPos在函数中到底发生了怎样的变化,为什么我运行出来的结果如下图?求大神帮忙把我的程序改错,让指针能够顺利地指向下标并在主函数里顺利地输出正确结果 展开
2个回答
展开全部
//我自己写了一个, 差不多
//大概问题就是ptr = a
//ptr指向数组了, 那么FindMax函数内部的ptr = i就会改变数组a的值
#include <stdio.h>
int FindMax(int num[], int n, int *pMaxPos);
int FindMin(int num[], int n, int *pMinPos);
int main(void)
{
int a[] = {-1, 2, 3, 45, 92, 8, 9, 12, 7, 8};
int n, max, min, umax, umin, *pMaxPos, *pMinPos;
//这里如果单纯只是在函数内部使用*pMaxPos = i会导致改变数组的值
//(因为之前使用pMaxPos = a), 而不是记录数组下标
umax = umin = 0;
//必须初始化0, 否则最小值在头部, 会出现一个随机数(临时变量)
pMaxPos = &umax;
pMinPos = &umin;
//END
n = sizeof(a) / sizeof(a[0]);
max = FindMax(a, n, pMaxPos);
min = FindMin(a, n, pMinPos);
printf("max = %d, min = %d\n", max, min);
printf("%d, %d", umax, umin);
}
int FindMax(int num[], int n, int *pMaxPos)
{
int i, t;
t = num[0];
for(i = 0; i < n; i++)
{
if(t < num[i])
{
t = num[i];
*pMaxPos = i;
}
}
printf("pMaxPos = %d\n", *pMaxPos);
return t;
}
int FindMin(int num[], int n, int *pMinPos)
{
int i, t;
t = num[0];
for(i = 0; i < n; i++)
{
if(t > num[i])
{
t = num[i];
*pMinPos = i;
}
}
printf("pMinPos = %d\n", *pMinPos);
return t;
}
2016-05-02 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
参考以下
regFunc((void *)param);
这是通过函数指针调用函数。括号里边的 param 是 test_struct 类型的,所以必须强制转换为 (void*)。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。函数指针有两个用途:调用函数和做函数的参数。
赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
指向函数的指针变量没有++和--运算,用时要小心。
函数名相当于一个指向其函数入口指针常量。
可以对函数名进行一些相应的处理,如强制类型转换。
void MyFun(int x);
void (*FunP)(int ); //也可申明成void(*FunP)(int x),但习惯上一般不这样。
int main(int argc, char* argv[])
{
MyFun(10); //这是直接调用MyFun函数
/*FunP=&MyFun;
(*FunP)(20); // right */
/*FunP=MyFun;
FunP(20);// right */
/*FunP=&MyFun;
FunP(20); // right */
/*FunP=MyFun;
(*FunP)(20);// right */
(*MyFun)(10);// right
}
void MyFun(int x) //这里定义一个MyFun函数
{
printf(“%d\n”,x);
}
regFunc((void *)param);
这是通过函数指针调用函数。括号里边的 param 是 test_struct 类型的,所以必须强制转换为 (void*)。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。函数指针有两个用途:调用函数和做函数的参数。
赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
指向函数的指针变量没有++和--运算,用时要小心。
函数名相当于一个指向其函数入口指针常量。
可以对函数名进行一些相应的处理,如强制类型转换。
void MyFun(int x);
void (*FunP)(int ); //也可申明成void(*FunP)(int x),但习惯上一般不这样。
int main(int argc, char* argv[])
{
MyFun(10); //这是直接调用MyFun函数
/*FunP=&MyFun;
(*FunP)(20); // right */
/*FunP=MyFun;
FunP(20);// right */
/*FunP=&MyFun;
FunP(20); // right */
/*FunP=MyFun;
(*FunP)(20);// right */
(*MyFun)(10);// right
}
void MyFun(int x) //这里定义一个MyFun函数
{
printf(“%d\n”,x);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询