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

被折叠的 条评论
为什么被折叠?



