什么是指针引用的C等价物*&&引用;

什么是指针引用的C等价物*&&引用;,c,pointers,reference,C,Pointers,Reference,有人能告诉我指针“*&”的C等价物吗 换句话说,如果我的函数在C++中是这样的: void func(int* p, int*& pr) { p++; pr++; } 在C中转换第二个参数时,我将如何更改它 更新: @请告诉我我是否正确理解了翻译后的代码? 让我从初始化变量开始: int i = 10; int *p1 = &i; int **pr= &p1; 因此,当您执行(*pr)++时,基本上相当于: (p1)++ 但是,我无法理解从main(

有人能告诉我指针“*&”的C等价物吗

换句话说,如果我的函数在C++中是这样的:

void func(int* p, int*& pr)
{
    p++;
    pr++;
}
在C中转换第二个参数时,我将如何更改它

更新: @请告诉我我是否正确理解了翻译后的代码? 让我从初始化变量开始:

int i = 10;
int *p1 = &i;
int **pr= &p1;
因此,当您执行(*pr)++时,基本上相当于:

(p1)++
但是,我无法理解从main()内部看会是什么样子?

问题2:如果我有这样的代码段,我会怎么做

void pass_by_reference(int*& p)
{
        //Allocate new memory in p: this change would reflect in main
    p = new int;
}

使用指向指针的指针

void func(int* p, int** pr)
{
    p++;
    (*pr)++;
}
例如,请参见第二个参数,函数使用该参数返回解析停止的点


很抱歉更新太晚

请让我知道我是否正确理解了翻译后的代码?让我从初始化变量开始:

int i = 10;
int *p1 = &i;
int **pr= &p1;
因此,当您执行(*pr)++时,基本上相当于:

(p1)++

但是,我无法理解从main()内部看会是什么样子

我不明白
main
是如何进入这一领域的;我们在谈论
func
。在本次讨论中,
main
将是一个与其他函数类似的函数。函数中声明的变量仅在该函数执行期间存在

问题2:如果我有这样的代码段,我会怎么做

void pass_by_reference(int*& p)
{
        //Allocate new memory in p: this change would reflect in main
    p = new int;
}
关于传递给函数的引用,需要记住的是,它们只是说“此参数是传递给函数的参数的引用,更改它会更改原始参数。它不像非引用参数那样是本地副本。”

审查实践中的参考文献:

  • 如果您的函数声明为
    void func(int foo)
    并使用
    intk=0调用;傅(k),
    然后制作一份
    k
    的副本,该副本被
    func
    视为
    foo
    • 如果
      func
      更改
      foo
      k
      不会更改。您经常会看到函数通过复制参数“垃圾”传入,如下所示
  • 如果您的函数被声明为
    void func(int&foo)
    并使用
    intk=0调用;傅(k),
    然后对
    k
    的引用被
    func
    视为
    foo
    • 如果
      func
      更改
      foo
      ,它实际上是在更改
      k
    • 这样做通常是为了“传回”比返回值更多的值,或者当函数需要以某种方式持续修改对象时
现在的问题是C没有引用。但是,老实说,C++引用是引擎盖下的C指针。不同之处在于,引用不能为NULL,不应被视为指向C数组的开头,并且引用隐藏指针操作,使其看起来像是在直接处理变量

因此,每次在C++中看到引用时,都需要将其转换成C中的指针。即使它是一个指针,引用本身也会变成一个指针,所以您有一个指向指针的指针

那么指针是什么呢?记住,内存只是一个大的字节数组,每个字节都有一个地址。指针是包含地址的变量。C和C++给出指针类型,这样语言就能决定指针指向的数据类型。因此,
int
是一个整数值,
int*
是一个指向整数值的指针(与指向字符、结构或任何东西的指针相反)


这意味着您可以使用指针执行两项常规操作:可以对指针本身进行操作,也可以对指针指向的对象进行操作。如果指针指向一个结构,则使用一元前缀
*
(例如
*pr
)或
->
时会发生后者。(
a->b
实际上只是
(*a).b
的简写)

您使用指向指针的指针

void func(int* p, int** pr)
{
    p++;
    (*pr)++;
}
例如,请参见第二个参数,函数使用该参数返回解析停止的点


很抱歉更新太晚

请让我知道我是否正确理解了翻译后的代码?让我从初始化变量开始:

int i = 10;
int *p1 = &i;
int **pr= &p1;
因此,当您执行(*pr)++时,基本上相当于:

(p1)++

但是,我无法理解从main()内部看会是什么样子

我不明白
main
是如何进入这一领域的;我们在谈论
func
。在本次讨论中,
main
将是一个与其他函数类似的函数。函数中声明的变量仅在该函数执行期间存在

问题2:如果我有这样的代码段,我会怎么做

void pass_by_reference(int*& p)
{
        //Allocate new memory in p: this change would reflect in main
    p = new int;
}
关于传递给函数的引用,需要记住的是,它们只是说“此参数是传递给函数的参数的引用,更改它会更改原始参数。它不像非引用参数那样是本地副本。”

审查实践中的参考文献:

  • 如果您的函数声明为
    void func(int foo)
    并使用
    intk=0调用;傅(k),
    然后制作一份
    k
    的副本,该副本被
    func
    视为
    foo
    • 如果
      func
      更改
      foo
      k
      不会更改。您经常会看到函数通过复制参数“垃圾”传入,如下所示
  • 如果您的函数被声明为
    void func(int&foo)
    并使用
    intk=0调用;傅(k),
    然后对
    k
    的引用被
    func
    视为
    foo
    • 如果
      func
      更改
      foo
      ,它实际上是在更改
      k
    • 这样做通常是为了“传回”比返回值更多的值,或者