• C++函数返回指针的情况


    本文理解借鉴为什么不可以返回局部变量的指针
    首先要明确,局部变量的指针,与局部指针变量的区别
    局部变量的指针,若非static,则作用域仅为函数本身,在return之后即被释放,也即指针指向一个无效变量,因此不合理
    而局部指针变量则不同,尽管指针变量本身的生命期在return之后也结束,但只要其指向对象有效,其地址也是有效的
    开头链接中提到例子:
    //例1
    int f1()
    {
    int x = 10;
    return &x;
    }
    //例2
    int f2(int a[],int n)
    {
    int p=a[0];
    int i;
    for(i=1;i<n;i++)
    {
    if(
    p<a[i])
    p=&a[i];/
    p指向更大的数
    /

    return p;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    例1为局部变量的指针,若仅为这一个函数,会发现输出为10看似正确,但实则为x的这部分栈空间虽所有权不归x,但也并未被占用,若在庞大的系统中,x的地址被占用,则值不为预期的,因此是错误的
    而例2中,指针p指向数组a的空间,而a这部分作为实参传递,函数结束后依旧有效,因此p指向数组中的最大值,返回也依旧有效
    再看几个例子:
    //例3
    int *f3()
    {
    static int x = 10;
    return &x;
    }
    //例1
    int f4()
    {
    int
    x = new int(19);
    return x;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    例3和4都是合理的,因为例3的x为静态变量,在第一次函数调用时被初始化,之后的运行过程中一直存在,因此返回其引用也合理;
    而例4则是因为申请了堆上的内存,在delete之前是一直有效的,也因此要注意new或malloc的空间,一定不能忘记delete或free

  • 相关阅读:
    UITableView
    xib的读取方式
    远程登录树莓派
    来体验下Linux吧
    树莓派了解Linux基本命令
    来感受Linux命令行的“真香定律”
    初尝树莓派
    从入手树莓派开始
    08-java学习笔记-集合框架中的工具类
    07-java学习笔记-map集合
  • 原文地址:https://www.cnblogs.com/131415-520/p/13432883.html
Copyright © 2020-2023  润新知