关于指针作为函数返回值丢失值的问题

原创 2018年04月17日 21:14:00

记录个小问题:

定义了一个结构体:

struct vertex//定义顶点结构体
{
    int v_id;//顶点编号
    vector<string> attr;//顶点属性
    vector<vertex*> edge;//边
    int dist = INT_MAX;//用于计算最短距离时使用,表示距离查询顶点的最短距离
};

接着定义了图:

vertex G[VertexMaxNum];//定义原始图

在写某个函数的时候想把上面的图,即自定义结构体类型的数组指针作为函数的返回值:

vertex* ShortestPath(vertex G[],int query_id,int d)

在这个函数里,作为返回值的G0一切正常,可是在调用ShortestPath函数将其值存入vertex *G0中后,G0中的值全部丢失了。翻C++primer 6.3.2节说不要返回局部对象的引用或指针,因为函数完成后,它所占的存储空间也随之释放掉。因此,函数终止意味着局部变量的引用将指向不再有效的内存区域。感觉就是这个原因,又查阅了一些别的资料,决定干脆不返回数组指针了,在函数中对数组进行修改返回void,直接调用函数也许是比较好的选择。。

关于这个问题我再研究一下再补充这篇。

使用指针做函数返回值

1.使用指针做函数返回值 1、当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指向的空间是否存...
  • unix21
  • unix21
  • 2013-02-23 23:55:31
  • 1940

用C语言指针作为函数返回值

C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include #include...
  • u012507643
  • u012507643
  • 2016-10-25 09:15:03
  • 215

函数返回值作为左值问题

C++语言的函数返回值类型可以分为内部类型和自定义类型两大类。     在函数返回内部类型中不能返回数组类型但可以返回指向数组的指针,同样也可以返回指向函数的函数指针。如果希望返回值可以作为左值(即...
  • sunshinewave
  • sunshinewave
  • 2012-08-04 18:59:01
  • 8575

函数返回值、引用和指针的区别思考

函数返回值、引用和指针的区别思考 收藏 学了引用、指针后,这些概念被教材拿去和函数搅在一起,于是使人感到很糊涂。涉及到函数返回的到底是值,引用还是指针的问题,其实就是函数返回的过程中和函数结束的过...
  • shangyaowei
  • shangyaowei
  • 2013-12-19 20:30:40
  • 1672

函数指针,指针函数,返回值为指针的函数

在学习C语言时,一个比较容易混淆的概念就是函数指针、指针函数、返回值为指针的函数。本文将对这三个概念进行区分。指针函数就是返回值为指针的函数,两个本质上是同一事物,只是叫法不同。函数指针就是一个指向函...
  • wangxufa
  • wangxufa
  • 2017-06-08 21:23:17
  • 2792

结构体、结构体体指针作为函数返回值

函数使用结构体、结构体指针作为返回值分析32位机,gcc编译器使用结构体作为返回值分析反汇编代码可知,当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变...
  • dfq12345
  • dfq12345
  • 2017-06-29 18:48:24
  • 5377

C/C++之函数返回值为指针或者是引用时常见错误总结

1、说明        函数如果是指针或则引用的返回,一般全局变量、局部静态变量、局部动态分配内存的变量可以使用作为函数的返回值,局部变量不行,因为局部变量函数调用完会自动销毁内存,这个时候返回的指针...
  • u011068702
  • u011068702
  • 2017-03-20 17:25:32
  • 1013

函数返回值为引用可以做左值使用

#include using namespace std; /* 若返回静态变量或全局变量 可以成为其他引用的初始值 即可作为右值使用,也可作为左值使用 */ int getA() { sta...
  • bbs375
  • bbs375
  • 2016-09-21 08:02:47
  • 643

c/c++使用指针做函数返回值和指针作函数参数问题

一、使用指针做函数返回值:   1、当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指...
  • zhangjikuan
  • zhangjikuan
  • 2016-07-07 09:32:42
  • 3130

关于Vector作为函数的返回值

关于Vector作为函数的返回值,有几点需要说明:     1.首先如果Vector是一个局部的变量,那么返回该Vector的引用是十分危险的,因为在Vector超出作用域的,会自动调用相关的析构函...
  • jeffasd
  • jeffasd
  • 2015-01-19 15:25:53
  • 6044
收藏助手
不良信息举报
您举报文章:关于指针作为函数返回值丢失值的问题
举报原因:
原因补充:

(最多只允许输入30个字)