C++中的函数参数有三种传递方式:值传递、指针传递和引用传递。。。
发布网友
发布时间:2022-04-25 20:10
我来回答
共4个回答
热心网友
时间:2023-10-14 20:22
单独指针只是传递的指针的值,指针形参的变化与调用的实参无关,只有用指针的引用才能将函数体内的初始化值传递回去
热心网友
时间:2023-10-14 20:22
上面的程序,说白了还是指针,只不过是二级指针,看以下例子:
void allocMem1(unsigned char** buf)
{
*buf = new unsigned char[100];
memset(*buf, 0, 100);
}
void allocMem2(unsigned char *&buf)
{
buf = new unsigned char[100];
memset(buf, 0xff, 100);
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char *p1, *p2;
allocMem1(&p1);
allocMem2(p2);
}
可以发现,,函数2的效果与第一个函数是一样的,,,只不过在调用时,还有在函数体内部,把一级指针当成是一个值类型了,,但是其实就效果而言,与引用时一样的。
有点拗口,这个叫引用的指针,,比直接写二级指针可能要安全一点吧,,不过微软可不这么认为,com中都是用二级指针的,,二级指针的作用不是修改指针的内容而是修改指针本身,,,追问谢谢你,一言中的,,就是一个二级指针,,都怪我没看清楚。。。。可是为什么说引用的指针,,比直接写二级指针要安全一点?
追答*buf = new unsigned char[100];
使用二级指针,需要安上述方法改变传入指针的地址,但是很多时候,开发者会混淆对象与指针的概念,,会出现以下危险操作:
buf = 0;
buf[0] = 0;
p2 = buf; delete []p2,,,
buf = p3;
等等等。。。。
改用引用,很多危险操作编译时就会报错的
热心网友
时间:2023-10-14 20:23
二维指针的引用追问应该是一级指针的引用,,即为二级指针吧
热心网友
时间:2023-10-14 20:24
ewq