下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

学习在c++中返回局部变量的指针

作者:课课家教育     来源: http://www.kokojia.com点击数:1176发布时间: 2016-11-26 13:00:33

标签: c++局部变量变量赋值

大神带你学编程,欢迎选课

  C++这个词在中国的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“Cplusplus”,“CPP”。它是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。今天小编要为大家介绍的教程是——学习在c++中返回局部变量的指针。

学习在c++中返回局部变量的指针_c++_局部变量_变量赋值_课课家

  作为一名开发人员,对于函数返回指针这个操作应该不再陌生了吧,毕竟返回指针的函数的用途还是十分广泛的。那么大家都应该知道这个操作本来就是很容易出现问题的。如果大家想要更加深入这方面的知识,小编建议大家可以去阅读一下《vc++入门经典》这本书,这是由霍顿编写的。在这本书里面,作者为我们提供了一个非常有代表性的例子。小编特意找了出来演示给大家看,具体的例子,如图所示:

具体的例子

  一、例子分析

  大家可以看到,在以上的例子中,主要有两个输出语句。有一个输出语句是直接就已经输了出3*5=1。然而,在另一个在一个函数中进行了乘法的运算,也就是5*3,把它存到result变量中其实也没有什么问题的。接着我们就要返回该变量的指针,输出的时候再接触引用。这样做的话,好像并没有什么错误发生。可能大家偶会以为刚刚的这两条输出语句,好像结果都应该会输出数字15。但是小编想说的是,事实并不是这样的哟!在编译器中会向大家抛出一个警告信息,信息如下:[Warning]addressoflocalvariable`result'returned。所以当程序运行以后,得出来的结果也并不是我们想象中的那样输出数字15。那么第二条输出语句又会输出什么呢?就是一个不可预见的值。有人就会问,这到底是怎么一回事呢?如果想知道答案的话,接着往下面看吧!

  其实大家只要仔细的分析一下,就会知道result是一个局部变量,他的作用域仅仅只在treble函数中的。所以当treble函数执行结束以后,result变量就会被析构了。那么它原来占用的内存区域通通都会被系统作为回收,可以存储任何的数据。然而返回的指向这个地址的指针也会失去了它原本的意义。看到这里,大家有没有想明白了什么?没错,因此我们可以得到这样一条准则:就是永远不要尝试着从函数中返回局部自动变量的地址。

  假如说大家真的需要这样操作的话,那么小编的建议就是:首先大家可以传入一个指针变量,在函数的参数表中进行。接着我们就把所需要写入的数据写入到刚刚传入的指针变量所指向的地址中去。因为这个指针所指向的变量,作用域都是在函数体以外的。所以不会在函数结束的时候就已经被回收了。

  二、解决问题

  好了,说了那么多。现在是时候回到我们刚刚所遇到的问题上了。大家都应该知道localtime时间函数,就是一个用于返回指针的函数,它的返回值类型为:tm*。

  1.声明变量

  那么问题就来了?我们应该怎样来接收这个返回值?大家知道答案吗?哈哈,没错,答案当然就是声明一个变量,但是一定要与之类型一模一样的变量哟!所以小编就会这样子编写声明变量:tm*result;

  2.变量赋值

  那么第二步我们要做什么呢?相信不用小编说,大家都应该知道吧。没错,就是给变量进行赋值。具体怎样给变量赋值呢?也许有人会这样给变量进行赋值:result=localtime(....),你是不是也是这样呢?

  一般来说,返回什么类型的变量,当然就要给什么类型的变量进行赋值的。但是如果真的是这样的话,就会发生了大家都不原意看到的结果了。也许在这个时候,大家都应该想到了。没错,就是这个指针的问题。刚刚小编已经说过了,返回的指针在函数结束的时候,就已经不再有效了。所以正确的方法应该是以下这种:

  tmresult;

  result=*localtime(....);

  当然啦,如果大家不喜欢以上这种方法的话,也可以尝试以下这种方法,毕竟这两种方法得出来的结果都是一样的。具体的代码如下:

  tm*result;

  *result=*localtime(...);

  大家看着以上两种正确的方法,有没有发现他们之间其实也有一个共同特点呢?那就是他们两个在函数结束值前,对于返回的指针解除了引用。接着使用这个数值,为指针又或者是变量指向的内存区域进行赋值。通俗一点来说,就是一定要复制函数的返回值。为什么呢?那是因为在函数体中变量就会被析构。

  其实小编觉得指针是强大而又灵活的,所以大家在编写的时候一定要避免一些低级错误,还要明确一下基本的概念。毕竟只有这样,才可以让指针更好更灵活的为我们进行服务。大家认为对不对呢?

  小编结语:

  今天小编主要为大家简单介绍一下学习在c++中返回局部变量的指针,毕竟返回指针的函数的用途还是十分广泛的,所以大家一定要好好学习一下这个函数返回指针,希望这会对大家有所帮助。本篇编程语言教程来源于:课课家教育。

赞(10)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程