什么是指针引用的C等价物*&&引用;
有人能告诉我指针“*&”的C等价物吗 换句话说,如果我的函数在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(
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
- 这样做通常是为了“传回”比返回值更多的值,或者当函数需要以某种方式持续修改对象时
- 如果
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
- 这样做通常是为了“传回”比返回值更多的值,或者
- 如果