函数参数中的*和含义是什么

Dog*_*Dog 12 c++ parameters function

如果我有一个功能,int *&它意味着什么?如何只将int或指针int传递给该函数?

function(int *& mynumber);
Run Code Online (Sandbox Code Playgroud)

每当我尝试将指针传递给该函数时,它会说:

error: no matching function for call to 'function(int *)'
note: candidate is 'function(int *&)'
Run Code Online (Sandbox Code Playgroud)

Fle*_*exo 22

它是对指向int的指针的引用.这意味着有问题的函数可以修改指针以及int本身.

你可以只传入一个指针,一个复杂因素是指针需要是一个l值,而不仅仅是一个r值,所以例如

int myint;
function(&myint);
Run Code Online (Sandbox Code Playgroud)

单独是不够的,也不允许0/NULL,其中:

int myint;
int *myintptr = &myint;
function(myintptr);
Run Code Online (Sandbox Code Playgroud)

是可以接受的.当函数返回时,它很可能myintptr不再指向它最初指向的内容.

int *myintptr = NULL;
function(myintptr);
Run Code Online (Sandbox Code Playgroud)

如果函数在给定NULL指针时期望分配内存,那么也可能有意义.查看函数提供的文档(或阅读源代码!),了解如何使用指针.


Mat*_* M. 10

简单地说:对指针的引用.

在没有引用的C中,"重定位"指针的传统方法是将指针传递给指针:

void c_find(int** p, int val); /* *p will point to the node with value 'val' */
Run Code Online (Sandbox Code Playgroud)

在C++中,这可以通过引用语法来表达,以避免尴尬的双重引用.

void cpp_find(int*& p, int val); // p will point to the node with value 'val'
Run Code Online (Sandbox Code Playgroud)

  • +1我喜欢你用C++*和*C解释它的方式. (3认同)

luk*_*uke 7

它表示对指向int的指针的引用.换句话说,该函数可以将参数更改为指向其他内容.

要传入变量,只需传递一个int*.正如阿伍德兰所指出的那样,传入的内容必须是l值.

编辑:

以awoodland为例:

#include <iostream>

void foo(int*& var)
{
    delete var;
    var = new int;
}

int main(int argc, char* argv[])
{
    int* var = NULL;

    std::cout << var << std::endl;

    foo(var);   // this function can/will change the value of the pointer

    std::cout << var << std::endl;

    delete var;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)