当前位置:  开发笔记 > 编程语言 > 正文

什么是C++中的**?

如何解决《什么是C++中的**?》经验,为你挑选了6个好方法。

我已经看到了一些代码,以及我的编译器生成的一些错误,这些错误**在变量之前有一个' '标记(例如**变量名未引用 - 或者其他东西,我不能完全回想起来).我相当肯定这与指针有关,如果我不得不猜测它看起来像是试图取消引用两次.' **'是相当不容易的.有人能指出我一个好的网站/文档,或者有人会在这里解释一下吗?

谢谢.

很好的回应.如果我可以添加,那么指向指针的指针有什么用呢?你不应该只使用原始指针而不是创建另一个指向原始指针的指针吗?



1> Antti Huima..:

**实际上并不是指向指针的指针(如声明中所示),但也是取消引用(在语句中)的解除引用.

它经常在C中使用,它没有引用的符号,例如更新返回值,它是一个指针类型:

int alloc_foo(struct foo **foo_ret)
{
    *foo_ret = malloc(sizeof(struct foo));
    return 1; /* to indicate success; return value in foo_ret */
}



2> Parappa..:

您可以识别main()的签名:

int main(int argc, char* argv[])

以下是等效的:

int main(int argc, char** argv)

在这种情况下,argv是指向char*数组的指针.

在C中,索引运算符[]只是执行指针运算的另一种方式.例如,

foo[i]

生成相同的代码

*(foo + i)



3> Rob Kennedy..:

这不是一个**象征.它只是一个*令牌,后跟另一个*令牌.在你的情况下,你有一个指向指针的指针,它被解除引用两次以获得真正指向的东西.



4> Can Berk Güd..:

**是指向指针的指针.

它可能是一个矩阵(数组数组)或一个字符串数组(一个char数组)等.



5> Paul Becking..:

这是一个双重解除引用.

int i = 3;
int* ptr_to_i = &i;
int** ptr_to_ptr_to_i = &ptr_to_i;

std::cout << **ptr_to_ptr_to_i << std::endl;

打印3.



6> P Daddy..:

我只是想强调指针指针的一些用法.其他职位触及了大部分内容,但我认为重申可能会有所帮助.

它允许被调用者修改调用者拥有的指针.例如,可以将指针传递给指向字符串开头的指针,并且被调用者可以修改指向指针,现在指向字符串中发生特定字符的位置.

因为数组会降级为指针(并且指针可以被视为数组),所以如果你有以下内容,通常会看到指向指针的指针:

指向数组的指针.这是对上述情况的概括,因为"字符串"(无论如何都是C风格的字符串)实际上只是一个chars 数组.

一个指针数组.例如,您可能有一个指向对象的指针数组,允许多态,或指针数组来选择存储在另一个集合中的对象.

一组数组.同样,数组降级为指针,因此这是上述的特定情况.这通常用于所谓的"锯齿状"阵列(与矩形相对).

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有