这几个fun函数中指针n的位置和形式不同,有什么区别啊?我感觉都一样啊!
第一种:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void fun (int x, int pp[], int *n)
{
int i,j=0,count=0;
for(i=1;i<=x;i++)
{
if(x%i==0)
{
if(i%2!=0)
{ pp[j++]=i;
count++;
}
}
}
*n=count;
}
void main ()
{
FILE *wf;
int x,aa[1000], n, i ;
system("CLS");
printf("\nPlease enter an integer number : \n ") ;
scanf ("%d", &x) ;
fun (x, aa, &n) ;
for (i=0 ; i<n ; i++)
printf ("%d ", aa [i]);
printf ("\n ") ;
/******************************/
wf=fopen("out.dat","w");
fun (30, aa, &n) ;
for (i=0 ; i<n ; i++)
fprintf (wf,"%d ", aa [i]);
fclose(wf);
/*****************************/
第二种:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void fun (int x, int pp[], int *n)
{
int i,j=0,count=0;
*n=count;
for(i=1;i<=x;i++)
{
if(x%i==0)
{
if(i%2!=0)
{ pp[j++]=i;
count++;
}
}
}
}
void main ()
{
FILE *wf;
int x,aa[1000], n, i ;
system("CLS");
printf("\nPlease enter an integer number : \n ") ;
scanf ("%d", &x) ;
fun (x, aa, &n) ;
for (i=0 ; i<n ; i++)
printf ("%d ", aa [i]);
printf ("\n ") ;
/******************************/
wf=fopen("out.dat","w");
fun (30, aa, &n) ;
for (i=0 ; i<n ; i++)
fprintf (wf,"%d ", aa [i]);
fclose(wf);
/*****************************/
}
第三种:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void fun (int x, int pp[], int *n)
{
int i,j=0,count=0;
n=&count;
for(i=1;i<=x;i++)
{
if(x%i==0)
{
if(i%2!=0)
{ pp[j++]=i;
count++;
}
}
}
}
void main ()
{
FILE *wf;
int x,aa[1000], n, i ;
system("CLS");
printf("\nPlease enter an integer number : \n ") ;
scanf ("%d", &x) ;
fun (x, aa, &n) ;
for (i=0 ; i<n ; i++)
printf ("%d ", aa [i]);
printf ("\n ") ;
/******************************/
wf=fopen("out.dat","w");
fun (30, aa, &n) ;
for (i=0 ; i<n ; i++)
fprintf (wf,"%d ", aa [i]);
fclose(wf);
/*****************************/
}
第1种情况,*n=count,保存了计算后count的值,
第2种情况,*n=count,而count的初始值是0,*n=0,这个是没有意义的,返回的就是0,
第3个种情况指针n取count变量的地址,count变量的值发生变化,对应的指针n的值*n也发生变化,能返回有意义的计算后的count值