[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();
}总结一下,在本例中,函数传输变量值,不是把内部变量的地址传出去,而是在把外部指针传到函数内部,以外部指针为变量地址开辟一段空间,将内部变量写到那段空间中去。
#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();
}总结一下,在本例中,函数传输变量值,不是把内部变量的地址传出去,而是在把外部指针传到函数内部,以外部指针为变量地址开辟一段空间,将内部变量写到那段空间中去。
相关文章推荐
- 学习C语言_指针_4_通过指针使被调函数修改主调函数
- C语言练习篇-6利用指针通过形参传值给主调函数
- C语言 通过指针从函数返回一个数组
- php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
- C语言:通过函数指针来完成两个数的加减乘除(函数指针当做参数使用)
- C语言ftell()函数:获取文件读写指针的当前位置
- C语言学习之 通过指向函数的指针 实现函数的调用
- 通过函数参数获取新创建指针的三种方法
- 【php数组函数序列】之key() - 获取数组内部指针当前指向元素的键名
- 关于AVL平衡二叉树的c语言实现(函数内部改变指针本身)
- 【php数组函数序列】之current() - 获取数组内部指针当前指向元素的值
- 装饰器获取内部函数的变量值,这个方法简直太有爱了!
- C中打印堆栈或者通过函数指针获取函数名
- 关于C语言通过函数传递多个数据————指针的应用
- C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)
- 【php数组函数序列】之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
- C语言之最好理解的通过函数指针作为参数实现回调函数
- C语言:通过函数指针来完成两个数的加减乘除
- 不要用函数的指针参数去获取函数内部的内存
- C语言通过二次指针在函数中传值