您的位置:首页 > 职场人生

如何在子函数中改变main函数中的变量的值——阿里巴巴一面试题

2015-05-06 20:59 357 查看
今天去面试阿里巴巴的平台型产品经理,问了我一个C语言题(产品经理还让现场写程序,我也是醉了!!!),题目大概是

如何在子函数中改变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;   
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐