C++ 指针作为函数参数介绍
2009-12-20 05:47
204 查看
在学习指针的时候,我们可能会遇到费解的问题。假设我们有如下一段代码:
void getptr(int *_p,int num)
{
_p=(int *)malloc(num*sizeof(int));
}
void main()
{
int *ptr=NULL;
int k;
getptr(ptr,10);
}
我们想通过以上代码来为ptr分配内存,结果如何呢,大家可以试一下,肯定是失败的。同样还有下面一段代码来实现上面所述功能。
void getptr(int **_p,int num)
{
*_p=(int *)malloc(num*sizeof(int));
}
void main()
{
int *ptr=NULL;
int **p=&ptr;
getptr(p,10);
}
第2段代码可以实现为ptr动态分配内存。与第一段相比,我们首先会有一个疑问:指针作为函数参数传递时,传递的不是当前指针本身?当然,指针作为形参时,传递的是当前指针的一个副本,否则第一段代码就可以啦。先说第一段代码,"传递"p的时候会生成副本_p,_p和p是两个不同的指针变量,但它们指向同一个数据。因此,第一段代码不能为ptr分配内存,而是为其副本分配了内存。
正确的做法可以用第2段代码,因为副本和原本指向同一个数据,那我们可以把ptr作为数据,也就是把ptr封装在一指针里面,即使用二维指针int **p=&ptr。到此,大家可以理解指针作为函数参数的传递过程了。而且既然指针被传到函数里面了,还有什么不能做的呢。
说些题外话,有些人爱多想,既然原本和副本指向同一块数据,那可以在数据上做点文章。如果能想到这,说明你是一个会学习的人,不错。但要提醒大家,首先要搞清楚char *p="abc"的原理,我可以告诉大家结论,但还是希望能自己多去google。char *p="abc"等同于 const char *p="abc",也就是不可以通过p来改"abc"了。所以当你想操作数据时,有时候会读,有时候既可以读又可以写。
void getptr(int *_p,int num)
{
_p=(int *)malloc(num*sizeof(int));
}
void main()
{
int *ptr=NULL;
int k;
getptr(ptr,10);
}
我们想通过以上代码来为ptr分配内存,结果如何呢,大家可以试一下,肯定是失败的。同样还有下面一段代码来实现上面所述功能。
void getptr(int **_p,int num)
{
*_p=(int *)malloc(num*sizeof(int));
}
void main()
{
int *ptr=NULL;
int **p=&ptr;
getptr(p,10);
}
第2段代码可以实现为ptr动态分配内存。与第一段相比,我们首先会有一个疑问:指针作为函数参数传递时,传递的不是当前指针本身?当然,指针作为形参时,传递的是当前指针的一个副本,否则第一段代码就可以啦。先说第一段代码,"传递"p的时候会生成副本_p,_p和p是两个不同的指针变量,但它们指向同一个数据。因此,第一段代码不能为ptr分配内存,而是为其副本分配了内存。
正确的做法可以用第2段代码,因为副本和原本指向同一个数据,那我们可以把ptr作为数据,也就是把ptr封装在一指针里面,即使用二维指针int **p=&ptr。到此,大家可以理解指针作为函数参数的传递过程了。而且既然指针被传到函数里面了,还有什么不能做的呢。
说些题外话,有些人爱多想,既然原本和副本指向同一块数据,那可以在数据上做点文章。如果能想到这,说明你是一个会学习的人,不错。但要提醒大家,首先要搞清楚char *p="abc"的原理,我可以告诉大家结论,但还是希望能自己多去google。char *p="abc"等同于 const char *p="abc",也就是不可以通过p来改"abc"了。所以当你想操作数据时,有时候会读,有时候既可以读又可以写。
相关文章推荐
- C++传递对象函数指针作为参数
- C++ 引用和指针作为函数参数的例子。请不要拍砖
- C++ 常量指针或者常量引用作为函数参数传递的原因
- c++将引用或者是指针作为函数参数实现实参的运算
- C++指针与函数—指针作为参数和返回值
- 指针作为函数参数在C/C++中调试和探讨
- c++ 成员函数作为函数指针参数传入
- C++基础之指针作为函数的参数
- c++之指针作为函数参数传递的问题
- c++之指针作为函数参数传递的问题
- c++之指针作为函数参数传递的问题
- C++中将数组的指针作为函数参数
- c++之指针作为函数参数传递的问题
- C++指针作为函数的参数进行传递时注意的问题
- C++指针作为函数参数的问题
- c++之指针作为函数参数传递的问题
- C++ 常量指针或者常量引用作为函数参数传递的原因
- C++指针作为函数的参数进行传递时注意的问题
- C++指针【数组、字符串作为函数的参数】
- C++指针,引用,常引用作为函数的参数