Gar*_*ngh 0 c pointers reference
有人可以让我知道指针 "*&" 的C等价物吗?
换句话说,如果我的函数在C++中是这样的:
void func(int* p, int*& pr)
{
p++;
pr++;
}
Run Code Online (Sandbox Code Playgroud)
在C中转换它时,我如何更改第二个参数?
更新: @MikeDeSimone:如果我理解了翻译的代码,请告诉我?让我从初始化变量开始:
int i = 10;
int *p1 = &i;
int **pr= &p1;
Run Code Online (Sandbox Code Playgroud)
所以,当你执行(*pr)++时,这基本上相当于:
(p1)++
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解main()内部的外观如何?
问题2:如果我有这样的代码片段,我该怎么办?
void pass_by_reference(int*& p)
{
//Allocate new memory in p: this change would reflect in main
p = new int;
}
Run Code Online (Sandbox Code Playgroud)
您使用指针指针.
void func(int* p, int** pr)
{
p++;
(*pr)++;
}
Run Code Online (Sandbox Code Playgroud)
例如,请参阅strtoul的第二个参数,该函数用于返回解析停止的点.
对不起,迟到了...
如果我理解正确的翻译代码,请告诉我?让我从初始化变量开始:
int i = 10;
int *p1 = &i;
int **pr= &p1;
Run Code Online (Sandbox Code Playgroud)
所以,当你执行(*pr)++时,这基本上相当于:
(p1)++
Run Code Online (Sandbox Code Playgroud)
是.
但是,我无法理解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;
}
Run Code Online (Sandbox Code Playgroud)
关于传递给函数的引用要记住的事情是它们只是说"这个参数是对传递给函数的参数的引用,并且更改它会改变原始函数.它不是像非引用参数那样的本地副本."
在实践中审查参考文献:
void func(int foo);,并呼吁与int k = 0; foo(k);再复制的k被提出,func认为的foo.
func改变foo,k不会改变.您经常会看到函数"垃圾"这样的传递复制参数.void func(int& foo);并调用,int k = 0; foo(k);则会引用一个k被func视为的引用foo.
func改变foo,它实际上正在改变k.现在的问题是C没有引用.但是,说实话,C++引用是引导下的C指针.不同之处在于引用不能为NULL,不应该被视为指向C数组的开头,引用会隐藏指针操作,使其看起来像是直接处理变量.
因此,每次在C++中看到引用时,都需要将其转换为C中的指针.引用类型无关紧要; 即使它是一个指针,引用也会变成一个指针本身,所以你有一个指向指针的指针.
那么什么是指针呢?请记住,内存只是一个很大的字节数组,每个字节都有一个地址.指针是包含地址的变量.C和C++提供指针类型,因此语言可以确定指针指向的数据类型.因此,a int是整数值,a int*是指向整数值的指针(与指向字符,结构或其他的指针相对).
这意味着您可以使用指针执行两项常规操作:您可以对指针本身进行操作,也可以对指针指向的对象进行操作.后者是使用一元前缀*(例如*pr)或->指针指向结构时发生的情况.(a->b实际上只是简写(*a).b.)