C++ 将指针传递给调用函数,但调用函数参数作为引用
我试过下面提到的这段代码,我不明白为什么需要将C++ 将指针传递给调用函数,但调用函数参数作为引用,c++,C++,我试过下面提到的这段代码,我不明白为什么需要将*p传递给doOperation()函数。为什么我们不能通过p?这两者的区别是什么 doOperation(*p); // need explanation why derefencing doOperation(p); // Gives compilation error intmain() { int*p=getpointer(); std::cout您已将p声明为整数指针。函数doOperation将int引用作为参数。doOperation
*p
传递给doOperation()
函数。为什么我们不能通过p
?这两者的区别是什么
doOperation(*p); // need explanation why derefencing
doOperation(p); // Gives compilation error
intmain()
{
int*p=getpointer();
std::cout您已将p
声明为整数指针。函数doOperation
将int引用作为参数。doOperation(*p)
表示您正在取消引用指针(指向数组中的第一个元素)并将其传递给函数。正如@dxiv所指出的,在函数getpointer
中,循环初始化11个元素,而不是10个。您只需更改doOperation(*p)即可解决此问题;//为什么必须将其作为未传递指针的指针传递。p
是指针,*p
是指向的值,在本例中是一个整数,其引用被传递。for(i=0;i
int main()
{
int *p = getpointer();
std::cout << "p:" << *p << std::endl;
doOperation(*p); // Why this has to be pass as a pointer when the function parameter as reference
return 0;
}
void doOperation(int &ptr)
{
//std::cout << "ptr:" << ptr << std::endl;
}
int *getpointer()
{
int *ptr = new int[10];
int i;
for (i=0; i <= 10; i++)
{
*(ptr+i) = i;
}
return ptr;
}
void doOperation(int *&ptr)
{
std::cout << "ptr:" << ptr << std::endl;
}
doOperation(p);
p:0
ptr:0x2b71550
#include <iostream>
void doOperation(int *&ptr)
{
std::cout << "ptr:" << ptr << std::endl;
}
int *getpointer()
{
int *ptr = new int[10];
int i;
for (i=0; i < 10; i++)
{
*(ptr+i) = i;
}
return ptr;
}
int main()
{
int *p = getpointer();
std::cout << "p:" << *p << std::endl;
doOperation(p);
return 0;
}