Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将指针传递给调用函数,但调用函数参数作为引用_C++ - Fatal编程技术网

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;
}