原文地址:指针或引用做为返回值
作者:青青
当函数返回指针的时候,返回的是一个地址;
比如
int *fun(int *p)
{
(*p)++;
return p;
}
当函数返回一个引用时,返回的是也一个地址;比如
int& func(int& p)
{
return p;
}
当返回引用的时候 ,函数可以作为左值来使用,也就是说可以实现链式表达式
.指针或引用做为返回值时,必须得是当函数返回(结束后)依然存在在的值,所以不能是函数内部变量
1) a.c
#include <stdio.h>
#include <string.h>
int *func(int *p) //因为p是从主调函数传过来的指针,所以当func结束时依然存在,所以
{
(*p)++;
return p; //OK: 可以做为返回值
}
int main()
{
int i=10;
int *p=&i;
printf("%dn", *(func(p)));
return 0;
}
2)a.cpp
#include <stdio.h>
int& func(int& p) //因为p是从主调函数传过来的引用,所以当func结束时依然存在,所以
{
p++;
return p;
//OK: 可以做为返回值
}
int main()
{
int i=10;
int& p=i;
printf("%dn", func(p));
return 0;
}
3)a.cpp
#include <stdio.h>
int& func()
{
static int i=10; //因为是全局的静态区
int& p=i;
p++;
return p;
//OK:可以做为返回值
}
int main()
{
printf("%dn", func());
return 0;
}
4) a.cpp
#include <stdio.h>
int& func()
{
static int i=10;
//因为是全局的静态区
i++;
return i;
//OK:可以做为返回值
}
int main()
{
printf("%dn", func());
return 0;
}
=============================================
而
int& func() //因为i是func函数内局部值,所以当func结束时不再存在,所以
{
int i=10;
return i;
//Error: 可以不能做为返回值
}
比如
int *fun(int *p)
{
}
当函数返回一个引用时,返回的是也一个地址;比如
int& func(int& p)
{
}
当返回引用的时候 ,函数可以作为左值来使用,也就是说可以实现链式表达式
.指针或引用做为返回值时,必须得是当函数返回(结束后)依然存在在的值,所以不能是函数内部变量
1) a.c
#include <stdio.h>
#include <string.h>
int *func(int *p)
{
}
int main()
{
}
2)a.cpp
#include <stdio.h>
int& func(int& p)
{
}
int main()
{
}
3)a.cpp
#include <stdio.h>
int& func()
{
}
int main()
{
}
4) a.cpp
#include <stdio.h>
int& func()
{
}
int main()
{
}
=============================================
而
int& func()
{
}