笔试被鄙视之细节问题一
2013-07-20 18:20
197 查看
利用函数的形参传递变量
在自己的印象中,利用一个指针变量作为形参就能够,函数执行后就能够更改此变量的值,一般来说这是正确的,但是忽略了前提条件,指针变量的空间开辟必须在传递参数之前,如果我硬要在函数中开辟呢?下面慢慢讲解,大神可飘过,不熟练的看看,菜鸟认真在编译器中实践一下。
1.普通的正确形式
void hello(int *a)
{
*a=5;
}
void main()
{
int i;//int *i=new int();
hello(&i);//hello(i);
cout<<i;//cout<<*i;
}
开始之前就i就有了自己的空间,不解释。
2.没有在传参之前开辟空间,而在函数内部开辟空间
void hello(int *a)
{
a=(int*)malloc(sizeof(int));
*a=5;
}
void main()
{
int *i=NULL;
hello(i);
cout<<*i;
}
程序会报错,cout<<*i;这步出错,访问异常,这是为什么呢?开始时i的地址是空的,利用(int *a)传递i实际上相当于执行了int *a=i,只是单纯的给a赋值,而没有实际的进入函数内部,故hello执行完之后i始终是NULL,所以会出错。有人可能会注意到,用引用会不会也会出现这种问题呢,我们用引用引用的一般都是对象,对象时开辟好空间的,不会出现这种问题,不信可以自己改了试试。
3.没有在传参之前开辟空间,而在函数内部开辟空间,采用指针的指针或指针的引用(我把指针地址的地址传进去不就可以了么)
void hello(int **a)//指针的指针
{
*a=(int *)malloc(sizeof(int));
**a=4;
}
void main()
{
int *i=NULL;
hello(&i);
cout<<*i;
}
void hello(int* &a)//指针的引用
{
a=(int*)malloc(sizeof(int));
*a=4;
}
void main()
{
int *i=NULL;
hello(i);
cout<<*i;
}
注意使用方式。
当然了我这里所列举的是简单的小例子,也算浅显易懂,但这些变量换成了字符串,结构体等得融会贯通才行。
在自己的印象中,利用一个指针变量作为形参就能够,函数执行后就能够更改此变量的值,一般来说这是正确的,但是忽略了前提条件,指针变量的空间开辟必须在传递参数之前,如果我硬要在函数中开辟呢?下面慢慢讲解,大神可飘过,不熟练的看看,菜鸟认真在编译器中实践一下。
1.普通的正确形式
void hello(int *a)
{
*a=5;
}
void main()
{
int i;//int *i=new int();
hello(&i);//hello(i);
cout<<i;//cout<<*i;
}
开始之前就i就有了自己的空间,不解释。
2.没有在传参之前开辟空间,而在函数内部开辟空间
void hello(int *a)
{
a=(int*)malloc(sizeof(int));
*a=5;
}
void main()
{
int *i=NULL;
hello(i);
cout<<*i;
}
程序会报错,cout<<*i;这步出错,访问异常,这是为什么呢?开始时i的地址是空的,利用(int *a)传递i实际上相当于执行了int *a=i,只是单纯的给a赋值,而没有实际的进入函数内部,故hello执行完之后i始终是NULL,所以会出错。有人可能会注意到,用引用会不会也会出现这种问题呢,我们用引用引用的一般都是对象,对象时开辟好空间的,不会出现这种问题,不信可以自己改了试试。
3.没有在传参之前开辟空间,而在函数内部开辟空间,采用指针的指针或指针的引用(我把指针地址的地址传进去不就可以了么)
void hello(int **a)//指针的指针
{
*a=(int *)malloc(sizeof(int));
**a=4;
}
void main()
{
int *i=NULL;
hello(&i);
cout<<*i;
}
void hello(int* &a)//指针的引用
{
a=(int*)malloc(sizeof(int));
*a=4;
}
void main()
{
int *i=NULL;
hello(i);
cout<<*i;
}
注意使用方式。
当然了我这里所列举的是简单的小例子,也算浅显易懂,但这些变量换成了字符串,结构体等得融会贯通才行。
相关文章推荐
- 笔试被鄙视之细节问题一
- 笔试被鄙视之细节问题二
- 笔试被鄙视之细节问题二
- 约瑟夫环问题,经典笔试,鄙视
- 关于java的一些细节问题,笔试可能会问到,整理一下
- JAVA基础笔试、面试常见问题集合
- 项目中一些细节问题的备忘与积累
- 伴随开发人员成长的问题:工程重要,还是算法重要?细节重要,还是架构重要?
- [笔试题]判断链表是否有环及环的位置问题
- 细节问题
- [小细节]关于ExtJS中树节点事件弹出窗口置底问题
- css细节问题
- [转] 应聘Java笔试时可能出现问题及其答案(第十一部分)
- Servlet开发的一些细节问题
- Asp.Net细节性问题精萃
- Asp.Net细节性问题精萃
- 基本数据的自动拆箱与装箱及其细节问题
- [笔试题] 腾讯某道笔试题,概率问题
- IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享
- Android开发细节——开发过程中遇到的细节问题与解决方案汇总【转】