您的位置:首页 > 编程语言 > C语言/C++

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

2017-01-14 02:45 302 查看
在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();
}总结一下,在本例中,函数传输变量值,不是把内部变量的地址传出去,而是在把外部指针传到函数内部,以外部指针为变量地址开辟一段空间,将内部变量写到那段空间中去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐