首先说一下:本人编程处于起步阶段,很多东西说的可能不标准甚至不对,因为大部分都是自己对于书上知识的理解。欢迎大家指出,互相进步。
有时候,我们在看别人编写的程序时,会发现,函数传参时有时候传的是一个地址(或者说指针),有时候传的是一个整型(或者其他类型,反正不是指针类型),这是为什么呢?
我们先来举个例子,我们定义一个函数:
int add(int a, int b)
{
int c = 0;
c = a + b;
return c;
}
不知道大家发现没有,我们定义函数的两个参数都是往函数内传递的值(可以理解为输入型参数)。假设我们现在有这种需求,我们想让函数的执行结果通过传参传递出来(比如说本例中的相加之后的c),那应该怎么办呢?
我知道,大家肯定有这样的疑问,既然都能通过return返回函数的执行结果,那我们为什么还需要通过参数将结果传递出来呢?
首先第一个,return只能返回一个值,假设在这个函数中,我想返回两个值,一个是两个参数(a和b)相加之后的结果,另一个是两个参数相减之后的结果,return应该就不行了吧。
第二点就是,很多系统函数的返回值并不是函数的执行结果,而返回的是0,1,或者-1,用来判断该函数有没有执行成功,而并不是这个函数执行的结果。
好了,下面我们来演示一下函数参数是地址(或者叫指针的形式):
int add(int a, int b, int *p)
{
int c = 0;
c = a + b;
*p = c;
return 0;
}
看见没有,我们没有通过return就将结果输出了出来。是不是明白了一丢丢。
最后,可能有同学已经发现,当我们想要传递一个字符串的时候,只能通过指针的形式进行传递,但是有时候我们是往函数里面传,有时候我们是将结果传递出来。那我们怎么区分呢?
首先,在很多系统函数定义参数的时候都有一个const char *,比如说这个strcpy函数char *strcpy(char *dest, const char *src);这个const就表示这个参数内容不能被改变,大家发挥自己的想象力,既然一个参数内容不能被改变,那肯定是将这个参数往函数内部传啊。而不带const的往往都是往外传递的参数(注意用了往往一词,因为有时候我们自己定义的函数往往都不太严谨,可能不管是输入的还是输出的都不加const,所以这时需要我们对整个程序分析一下)。
谢谢,每一个看的人,我只是一个刚入编程不久的人,如果有不准确或者出错的地方,欢迎指出。