指针或引用做为返回值
来源:互联网 发布:数据库设计与关系理论 编辑:程序博客网 时间:2024/05/21 14:56
原文地址:指针或引用做为返回值作者:青青
当函数返回指针的时候,返回的是一个地址;
比如
int *fun(int *p)
{
(*p)++;
returnp;
}
当函数返回一个引用时,返回的是也一个地址;比如
int& func(int& p)
{
returnp;
}
当返回引用的时候,函数可以作为左值来使用,也就是说可以实现链式表达式
.指针或引用做为返回值时,必须得是当函数返回(结束后)依然存在在的值,所以不能是函数内部变量
1) a.c
#include <stdio.h>
#include <string.h>
int *func(int*p) //因为p是从主调函数传过来的指针,所以当func结束时依然存在,所以
{
(*p)++;
return p; //OK: 可以做为返回值
}
int main()
{
inti=10;
int *p=&i;
printf("%dn", *(func(p)));
return0;
}
2)a.cpp
#include <stdio.h>
int& func(int&p) //因为p是从主调函数传过来的引用,所以当func结束时依然存在,所以
{
p++;
return p; //OK: 可以做为返回值
}
int main()
{
inti=10;
int& p=i;
printf("%dn", func(p));
return0;
}
3)a.cpp
#include <stdio.h>
int& func()
{
static int i=10; //因为是全局的静态区
int& p=i;
p++;
returnp; //OK:可以做为返回值
}
int main()
{
printf("%dn", func());
return0;
}
4) a.cpp
#include <stdio.h>
int& func()
{
static int i=10; //因为是全局的静态区
i++;
return i; //OK:可以做为返回值
}
int main()
{
printf("%dn", func());
return0;
}
=============================================
而
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()
{
}
阅读全文
0 0
- 指针或引用做为返回值
- 指针或引用做为返回值
- 返回值为引用或指针的成员函数加const要注意
- 函数体中的指针或引用常量不能被返回
- 不要返回局部对象的引用或指针
- 返回指向局部变量的指针或引用
- 返回指向局部变量的指针或引用
- 杜绝返回函数内局部变量的指针或引用
- 返回指向局部变量的指针或引用的问题
- C++不可以返回局部变量的引用或指针
- 关于返回局部变量的指针或引用
- Java方法强制传递引用参数(做为返回值),改变被传递参数值。
- effective c++ ------不要返回指向局部对象指针或引用,该返回对象就返回对象.
- 关于指针数组指针做为返回类型的函数
- effective C++函数返回值或引用
- C++练习:返回值指针or引用
- Effective C++——必须返回对象时,别妄想返回其引用或指针
- CComPtr对象作为参数进行 1.值传递 2.引用传递 3.做为返回值的注意事项
- 值传递、指针传递、引用传递…
- open和fopen的区别:(怎样获取文件…
- strlen和sizeof的区别
- 图像主题色 代码 --code, Windows
- vimrc配置
- 指针或引用做为返回值
- ConcurrentHashMap从jdk1.7到jdk1.8的变化
- strcmp和stricmp、strcmpi三…
- C语言中printf(),sprintf(),scan…
- 在Windows下编译OpenCV2.4.6
- opencv在windows7 vs20…
- #include<>和#include""的区别(转…
- opencv在vs2010下的安装和使用
- 应用程序无法正常启动(0xc00…