題目:
請撰寫函式,對傳送過來的三個數選出最大和最小數,并通過形參傳回結果。部分源程式如下:
#include <stdio.h>
void fun(int s[], int *p1, int *p2,int n)
{
}
main()
{
int a[3],i,max,min;
for (i=0;i<3;i++)
scanf("%d",&a[i]);
fun(a,&max,&min,3);
printf("max=%d,min=%d\n",max,min);
}
我寫的程式是這樣的,但是運行的結果不正確,一直是max=0,min=51,不知道哪里出錯了。
#include<stdio.h>
int main()
{
void fun(int s[],int *p1,int *p2,int n);
int a[3],i,max,min;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
fun(a,&max,&min,3);
printf("max=%d,min=%d\n",max,min);
}
void fun(int s[],int *p1,int *p2,int n)
{
int i;
p1=s,p2=s;
for(i=1;i<n;i++)
{
if(*p1<s[i])
p1=s+i;
if(*p2>s[i])
p2=s+i;
}
}
uj5u.com熱心網友回復:
p1和p2都是fun函式堆疊的區域變數,所以改變p1=xx(區域變數地址改變),不影響函式外max的地址,改變p2=xx也不影響min的地址。改成如下
void fun(int s[], int *p1, int *p2, int n) {
int i;
*p1=*p2=s[0];
for(i=1; i<n; i++) {
if(*p1 < s[i]) *p1 = s[i];
if(*p2 > s[i]) *p2 = s[i];
}
}
函式內不修改p1=xx,而是修改*p1=xx,這樣p1的地址不變還是函式外max的地址,所以修改*p1就可以修改max的記憶體。
uj5u.com熱心網友回復:
#include<stdio.h>
int main(int argc, char* argv[])
{
void fun(int s[],int *p1,int *p2,int n);
int a[3],i,max,min;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
fun(a,&max,&min,3);
printf("max=%d,min=%d\n",max,min);
system("pause");
return 0;
}
void fun(int s[],int *p1,int *p2,int n)
{
int i;
*p1=*p2=s[0];
for(i=1;i<n;i++)
{
if(*p1<s[i])
*p1=s[i];
if(*p2>s[i])
*p2=s[i];
}
}
uj5u.com熱心網友回復:
#include <stdio.h>
int main()
{
void fun(int s[], int *p1, int *p2, int n);
int a[3], i, max, min;
for (i = 0; i < 3; i++)
scanf("%d", &a[i]);
fun(a, &max, &min, 3);
printf("max=%d,min=%d\n", max, min);
}
void fun(int s[], int *p1, int *p2, int n)
{
int i;
*p1 =*p2 = *s;
for (i = 1; i < n; i++)
{
if (*p1 < s[i])
*p1 = *(s + i);
if (*p2 > s[i])
*p2 = (s + i);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/230480.html
標籤:新手樂園
上一篇:如何實作STL的雙向回圈鏈表?
下一篇:下面程式為什么錯啊?
