首页 > 编程笔记 > C++笔记 阅读:2

C++中的指针函数(指针作为函数返回值)

函数的返回值也可以是指针,这样的函数称为指针函数。其定义形式如下:
类型名 *函数名(参数表列);
函数返回的是一个地址。需要注意的是,指针的内容并不随返回地址一样经过复制成为临时变量。如果操作不当,后果将难以预料。

【实例】指针做返回值。定义一个指针函数,在函数结束时返回指针值,具体代码如下:
#include <iostream>
using std::cout;
using std::endl;

int *pointerGet(int *p) // 定义指针函数 pointerGet(),返回值为指针
{
    int i = 9; // 定义 i,注意 i 为局部变量,只在函数体内有效
    cout << "函数体中 i 的地址" << &i << endl;
    cout << "函数体中 i 的值:" << i << endl;
    p = &i; // 指针 p 指向 i 的地址
    return p; // 返回指针 p,即 i 的地址
}

int main()
{
    int *k = NULL; // 定义指针 k,赋值为 NULL
    cout << "k 的地址:" << k << endl; // 输出 k 的初始地址
    cout << "执行函数,将 k 赋予函数返回值" << endl;
    k = pointerGet(k); // 调用 pointerGet() 函数,返回值赋给 k
    cout << "k 的地址:" << k << endl; // 输出 k 的新地址(i 的地址)
    cout << "k 所指向内存的内容:" << *k << endl; // 临时变量 i 被销毁,内存不可预知,k 接收到是一个随机数
}
运行结果为:

k 的地址:0
执行函数,将 k 赋予函数返回值
函数体中 i 的地址0x6ffdbc
函数体中 i 的值:9
k 的地址:0x6ffdbc
k 所指向内存的内容:0

可以看到,函数返回的是函数体定义的 i 的地址。函数执行后,i 的内存被销毁,其值变成了一个不可预知的数。

注意,值为 NULL 的指针地址为 0,但并不意味着这块内存可以使用。将指针赋值为 NULL 是基于安全考虑。

相关文章