在C语言中主函数在调用子函数时,会产生相应的栈去存放调用子函数时的值,当调用完毕时,调用子函数所生成的栈则立即销毁。主函数在调用子函数时如果为值传递时,则传过去的参数并不影响主函数中参数的值,如果采用地址传递,则在子函数时会改变参数地址所指向的值。
Note:1、在子函数中生成一个数组想要通过返回参数(指针变量)传回主函数时,实际上传不过去。因为子函数生成的数组在子函数所建立的栈中,当调用结束时,栈被销毁,所创建的自然也被销毁,故主函数得不到相应的值。
2、想要通过子函数生成20个随机的数,可通过以下的方法:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void random(int *a);
int main()
{
int *a,i;
a=(int *)malloc(sizeof(int)*20); //为整形指针变量开辟一个20个整形的空间
random(a); //通过地址传递生成随机数
for(i=0;i<20;i++)
{
printf("%d\t",*(a+i));
}
return 0;
}
void random(int *a)
{
int i;
srand(time(NULL));
for(i=0;i<20;i++)
{
*(a+i)=10+rand()%41; //使生成的每一个数赋值给相应的指针变量所指向的地址
}
}