[c语言]通过指针获取函数内部变量值

在C语言,函数中声明的变量都是临时的,局部的变量,在函数执行结束后,这些局部变量会消失,局部变量占据的内存也会释放。那么如何在函数执行结束前将我们需要的临时变量输出到函数外?通常的情况是这样的,举个例子:

#include <QCoreApplication>
#include <QDebug>
void transport( int * param )
{
    int b=2;
    if( param != NULL )
    {
        *param = b;
        qDebug() << "param value in function"<<*param;
    }
    qDebug() << "param address in function" <<param;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int variant;
    transport( &variant );
    qDebug() << "Variant value is" << variant;//赋值成功variant = 2
    return a.exec();
}


在这个例子中,函数transport( int * param )中的变量b是临时变量,通过 *param = b;这条语句,将b的值传给函数外部变量。

这里有几点需要注意的:

1.外部变量需要有空间,就是说外部变量int variant是可以的,如果仅仅有intt型指针int  * variantPoint,而该指针没有开辟变量空间的话,是无法保存的,没有空间给他存,代码如下:

#include <QCoreApplication>
#include <QDebug>
void transport( int * param )
{
    int b=2;
    if( param != NULL )//空指针时无法进入
    {
        *param = b;
        qDebug() << "param value in function"<<*param;
    }else {
        param = &b;
        qDebug() << "param value in function"<<*param;//输出b的值“2”
    }
    qDebug() << "param address in function" <<param;//输出一个内存地址
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int  * pointer = NULL;
    transport( pointer );
    if( pointer == NULL )
    {
        qDebug() << "Pointer is null";//输出该条内容“Pointer is null”
    }else {
        qDebug() <<"int value is"<<*pointer;//无法进入
    }
    return a.exec();
}

所以说这样是无法把函数内的变量输出到函数外的。

2.函数内部赋值的时候,赋值语句是*param = b;而不是param = &b,代码如下:

#include <QCoreApplication>
#include <QDebug>
void transport( int * param )
{
    int b=2;
    param = &b;
    qDebug() << "param address in function" <<param;//输出param地址
    qDebug() << "param value is "<< *param;//输出“param value is 2”
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int variant = 0;
    transport( &variant );
    qDebug() << "Variant value is" << variant;//输出“Variant value is 0”,函数内部的值没有输出
    return a.exec();
}

总结一下,在本例中,函数传输变量值,不是把内部变量的地址传出去,而是在把外部指针传到函数内部,以外部指针为变量地址开辟一段空间,将内部变量写到那段空间中去。


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值