C/C++教程

关于 C/C++ 中函数能否返回指针的问题

本文主要是介绍关于 C/C++ 中函数能否返回指针的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

刚才在看 C++ Primer 发现在函数那一章讲函数返回值时, 对于返回值能否是引用或指针的问题进行了解答. 但是描述的不是很具体, 在翻阅了一些博客后在此做个简单的笔记

结论 : 函数能否返回指针, 取决于指针指向对象的状态.

1. 指针如果指向一个局部变量, 那么函数执行完毕后返回的值是不确定的.

#include <cstdio>

using namespace std;

int *back()
{
    int x = 1;
    int *p = &x;
    
    return p;
}

int *BACK()
{
    int x = 2;
    int *p = &x;
    
    return p;
}

int main(void)
{
    int *p = back();
    printf("%d\n", *p);	// 输出1
    
    int *q = BACK();
    printf("%d\n", *p); // 输出2
    
    return 0;
}

2. 如果指针指向的值为静态变量, 或者是堆上的一块空间, 那么函数执行完毕后其变量值或所在内存区域依然存在.

#include <cstdio>
#include <cstdlib>

using namespace std;

int *back()
{
    static int x = 1;
    int *p = &x;

    return p;
}

int *BACK()
{
    int x = 2;
    int *p = &x;

    return p;
}

int *heap()
{
    int *p = (int *)malloc(sizeof(int));

    return p;
}

int *HEAP()
{
    int *p = (int *)malloc(sizeof(int));

    return p;
}

int main(void)
{
    int *p = back();
    printf("%d\n", *p); //输出 1

    int *q = BACK();
    printf("%d\n", *p); //输出依然是 1

    p = heap();
    printf("%p\n", p);  //输出00000000001c13f0
    q = HEAP();
    printf("%p\n", p);  //输出依然是00000000001c13f0

    return 0;
}
这篇关于关于 C/C++ 中函数能否返回指针的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!