模拟人生4生不了孩子:在c中碰到一个很奇怪的问题

来源:百度文库 编辑:中科新闻网 时间:2024/04/27 20:52:31
代码如下:
#include<stdio.h>

void replacenum(int b,int c);

main()
{
int i;
int e;
int a[5];
int r;

printf("please input the nums!\n");
scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
for(e=0;e<4;e++)
for(i=0;i<(4-e);i++)
{
if (a[i]>a[i+1]){
r=a[i];
a[i]=a[i+1];
a[i+1]=r;
}
}
//replacenum(a[i],a[i+1]);
printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
}

/*void replacenum(int b,int c)
{
int r;
if (b>c){
r=b;
b=c;
c=r;
}
}
*/
这个程序是能编译通过的,但如果我调用下面的子函数来完成,也就是去掉那两个注释,把上面的if循环体替换掉的话,数组却不会被重排。很不能理解
我现在是一个c初学者,以前是做delphi的,希望大家能和我交流一下
可能我写的有点模糊
这是能通过的代码
#include<stdio.h>
main()
{
int i;
int e;
int a[5];
int r;

printf("please input the nums!\n");
scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
for(e=0;e<4;e++)
for(i=0;i<(4-e);i++)
if (a[i]>a[i+1]){
r=a[i];
a[i]=a[i+1];
a[i+1]=r;
}
printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
}

这是不能通过的代码
#include<stdio.h>

void replacenum(int b,int c);

main()
{
int i;
int e;
int a[5];
int r;

printf("please input the nums!\n");
scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4]);
for(e=0;e<4;e++)
for(i=0;i<(4-e);i++)
replacenum(a[i],a[i+1]);
printf("%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4]);
}

void replacenum(int b,int c)
{
int r;
if (b>c){
r=b;
b=c;
c=r;
}
}

改为
void replacenum(int *b,int *c)
{
int r;
if (*b>*c){
r=*b;
*b=*c;
*c=r;
}

调用时replace( &a[i], &a[i+1] );

好象传给replacenum函数的应该是地址吧,要不就酸是replacenum函数把传给他的两个参数排序了,也不会影响MAIN函数里的数组位置,要是MAIN传给replacenum是地址,就没问题了,呵呵!