如何在子函数中改变main函数中的变量的值——阿里巴巴一面试题
2015-05-06 20:59
357 查看
今天去面试阿里巴巴的平台型产品经理,问了我一个C语言题(产品经理还让现场写程序,我也是醉了!!!),题目大概是
如何在子函数中改变main函数中的变量的值?
比如main函数里定义一个int型变量a,初始值为1,如何在 fun 子函数中将a的值改成100。
当时我大概是这么写的:
当时写完之后,就立马觉得不对了,可是也愣是没想出其他方法。
我们知道C语言调用函数时虚实结合的方式都是采用“值传递”的方式,子函数fun的实参a相对于fun而言只是局部变量,它的作用域仅在子函数中,并不会改变 变量a的值。
那么怎么样才能得到我们想要的结果呢?回来翻了翻书,大概有下面这么几种方法:
1)使用return(这也是最简单的方法了)
2) 使用指向指针的指针
main中a是指向指针的指针,即它的值的值是指向int型变量内存的指针的地址,在fun中*p就表示该指针,即int型变量内存的地址。所以修改*p的值自然可以修改该内存的内容。
下面一段程序使用了同样的原理:
3)使用指针引用
如何在子函数中改变main函数中的变量的值?
比如main函数里定义一个int型变量a,初始值为1,如何在 fun 子函数中将a的值改成100。
当时我大概是这么写的:
#include <iostream> void fun(int *p) { p =100; } void main() { int *a = 1; fun(a); cout <<a <<endl; }
当时写完之后,就立马觉得不对了,可是也愣是没想出其他方法。
我们知道C语言调用函数时虚实结合的方式都是采用“值传递”的方式,子函数fun的实参a相对于fun而言只是局部变量,它的作用域仅在子函数中,并不会改变 变量a的值。
那么怎么样才能得到我们想要的结果呢?回来翻了翻书,大概有下面这么几种方法:
1)使用return(这也是最简单的方法了)
#include <iostream> int* fun() { int *p =100; return p; } void main() { int *a = 1; a = fun(); cout <<a <<endl; }
2) 使用指向指针的指针
#include <iostream> void fun(int **p) { *p =100; } void main() { int **a = 1; fun(a); cout <<a <<endl; }
main中a是指向指针的指针,即它的值的值是指向int型变量内存的指针的地址,在fun中*p就表示该指针,即int型变量内存的地址。所以修改*p的值自然可以修改该内存的内容。
下面一段程序使用了同样的原理:
#include <iostream.h> void fun(char ** p) { *p = 100; } void main() { int *a = 1; foo(&a); cout <<a<<endl; }
3)使用指针引用
#include <iostream> void fun( *& p) { p = 100; } void main() { int *a = 1; fun(a); cout << a <<endl; }
相关文章推荐
- 实参和形参指针做函数参数时,如何改变main函数变量的值
- 如何使用引用类型来改变变量的值
- C#与.NET程序员面试宝典 3.1.5 面试题24:如何理解C#中变量的作用域
- Java面试题---只用两个变量,如何做到把两个整数交换?
- const类型的成员函数内部如何改变成员变量
- 如何用Java程序改变系统环境变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- c/c++笔试题——const类型的成员函数内部如何改变成员变量
- ACTIVEX DLL时,如何在回调函数中改变DLL的一些私有变量的值,并触发用户事件?
- c++ for循环中,如何改变字符串变量里的部分值 使之于i 和j 相同步变化?????(即循环用cvLoadImage的path自动改变)
- java反射--如何改变private中的变量及方法
- java反射--如何改变private中的变量及方法
- 如何在类中将实例对象的指针清空(不通过指针变量名改变指针变量的指向)
- 如何在django的filter中传递字符串变量作为查询条件(动态改变查询条件)
- ref C#中的ShowDialog和Show的区别 为什么再ShowDialog中修改变量时原窗口中的变量不会被改变 out如何在这里应用
- 如何用eval()函数在局部函数内改变全局变量
- java反射--如何改变private中的变量及方法
- iOS如何将不可变变量改变成可变变量, deep copy objects into mutable
- const类型的成员函数内部如何改变成员变量
- AngularJs 如何监视外部变量是否改变? 如何使用$cookieStore保存cookie?