【问题标题】:C++ asterisk asterisk operatorC++ 星号星号运算符
【发布时间】:2013-08-04 21:32:45
【问题描述】:

我以前从未见过以任何语言执行过此操作,因为这是 google 难以搜索的符号。

**是什么意思?

sf::TcpSocket& client = **it;

【问题讨论】:

  • “它”是指针还是迭代器?

标签: c++ operators sfml


【解决方案1】:

它是dereferencing一个指向指针的指针,为了得到原来的sf:TcpSocket

这只是连续两个* 运算符。

在这种情况下,你也可以这样写:

// Given sf::TcpSocket **it;
sf::TcpSocket *tmp = *it; // Dereference once
sf::TcpSocket& client = *tmp;

【讨论】:

  • 我已经阅读了该页面:P 我仍然不明白:/。你能举一个更好的例子吗:)
  • 鉴于要取消引用的变量的名称,它很可能将迭代器取消引用到指针。可以取消引用的不仅仅是指针。
  • @Kyosu 如果你有一个对象,一个 int,比如:int i = 0,和一个指向 int 的指针:int* j,你可以像这样分配你的 int (i) 的地址: j = &i。如果您想通过j 访问int 的值,则必须像int k = *j 那样取消引用指针(即访问它指向的对象)。如果您创建了一个指向 int 指针的新指针:int** l = &j,要通过这个新指针访问原始 int,您必须取消引用两次:int m = **l。或者你可以像这样通过第二个指针修改 i 的值:**l = 10.
  • 是的 DAWG! :) 谢谢 Reed Copsey 和 James :) 你帮了我很大的忙 :)
  • 感谢您也向我介绍了迭代器:D
【解决方案2】:

我将给出一个非常简单的快速说明:

int **i;
Say i stores an address 0x1234
*i gives us the value say 0x5678 stored on address 0x1234.
**i gives us the desired value stored on address 0x5678.

您可以继续这样做,直到它的地址空间有效。 但是通过声明。

          int **i;

我们只需要严格遵守两次,任何进一步的尝试都会被编译器阻止。从而避免错误。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 2012-04-21
    • 2011-09-25
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多