给你用C说明下第一种和第二种
#include
void Func(int x)
{
x=20;
}
main()
{
int x=10;
Func(x);
printf("%d",x);
}
上面的本意是将x的值改为20
Func(x); 这样传x传到函数里面。发生的是值的copy.
(想想你在电脑上用ctrl+c的是候,原来那个文件还在,你复制过去的那个随便怎么改,原来那个文件还是不会变的)
调用函数时,在堆栈中另外分配内存来接收x的值(copy);
虽然变量名都是x,但实际上是占据着不同的内存地址空间。
在函数中你对x赋值也就可想而知为什么,回到主函数后,
x的值不变了。所以可以return回去就OK。
那如果,两个X占用同一块内存空间那就不一样了,
下面给出代码
#include
void Func(int *x)
{
*x=20;
}
main()
{
int x=10;
Func(&x);
printf("%d",x);
}
函数传的是指针,
在函数中,对传入的地址所保存的内容进行改变。
(当你想返回两个值的时候,而只能用一个return时,比如说一个数组。)
引用就是个别名,你的名字叫张三,小名叫狗蛋,这两个名字指的都是你。(名字不同,但都是同一块内存空间)
引用的话,void Func(int &a);
调用的时候Func(a);
void Func(int *a);
调用的时候Func(&a);
比较一下是不是用户在调用这个函数的时候别人就不知道你用的是引用了,而后面那个一眼就可以看出来用了指针。
(有点类中 private 为了保护数据安全的意思)
那没有办法了
你能列出来的可以作为参数和返回值
数组不可以作为返回值
形参就是函数声明里的参数,如字面意思,就是一个形式参数,并不是你程序中真正用到的,只是说明参数在函数里会怎么样传递怎么样用而已。
实际参数就是你定义了并真正使用的参数。
比如一个例子:
#include "stdio.h"
void display(int x)
{
printf("number is %d", x);
}
int main()
{
int y = 0;
display( y );
return 0;
}
x就是形参,y是实参,x只是说明参数在函数里怎么使用,而真正你定义并使用的是y。
如果上面的程序再改下:
#include "stdio.h"
void display(int x)
{
printf("number is %d", x);
}
int get()
{
int x;
scanf("%d", &x);
return x;
}
int main()
{
int y;
y = get();
display( y );
return 0;
}
get()函数就返回了一个整型给调用此函数的变量,返回值多种多样,在C++里也甚至可以返回一个类
int max(int data_a,int data_b)
{
return data_a >data_b?data_a:data_b;
}
int main(void)
{
printf("max = %d\n",max(5,8));
return 0;
}
max(int data_a,int data_b),data_a,data_b就是形参,
max(5,8)中的5,8就是实参 函数返回值:return data_a >data_b?data_a:data_b;返回两个数较大的一个,max(5,8)返回:8,所以运行后为:max = 8 因为函数中没有出口参数,只有入口参数,所以用return就可以返回了,呵呵