0

有人可以向我解释一下吗:

(((((*(parent))->leaves))[7])->zone_id)

指向指针的指针真的让我感到困惑。这是我在调试模式下从手表得到的表达式。我正在尝试访问zone_id树的最后一个元素内的字符串(有 10 个元素,每个元素对应不同的数字 0-9)。

编辑:这是整个搜索功能,希望它足以理解:

string Tree::search(string str, node** parent, int num) {

    int value;

    if (num < str.length()) {

        value = boost::lexical_cast<int> (str.substr(num, 1));

        if ((*parent)->leaves[value] != NULL  &&  num != str.length() -1) {

            search (str, &((*parent)->leaves[value]), num+1);


        } else if (num == str.length() -1) {

            if ( (*(parent)->leaves)[value]->zone_id.empty() )
                cout<<"Yep.";
            else
                return (string) "No_results.";

        }

    } 


}

和结构:

struct node {

    string zone_id;
    node* leaves [10];

};
4

3 回答 3

5

好吧,让我们去掉一些括号来简化一下:

(*parent)->leaves[7]->zone_id

现在它更容易理解了。我们正在取消引用parent( *parent),它为我们提供了一个指向某个对象的指针,该对象具有一个名为 的数组成员leaves。因此,我们使用索引 7 访问该数组的元素,这为我们提供了另一个指针,这一次指向一个具有名为 的成员的对象zone_id。然后我们访问该zone_id成员。

这一切都假设不涉及运算符重载。

图解(箭头是“指向”):

 ________     _________     ___________         ___________
| parent |-->| *parent |-->|  struct:  |   ,-->|  struct:  |
|________|   |_________|   | leaves[0] |   |   | zone_id   |
                           | leaves[1] |   |   | ...       |
                           | leaves[2] |   |
                           | leaves[3] |   |
                           | leaves[4] |   |
                           | leaves[5] |   |
                           | leaves[6] |   |
                           | leaves[7] | --'
                           | leaves[8] |
                           | ...       |
于 2012-12-28T13:58:31.260 回答
0

在我看来,删除括号实际上更容易阅读: (*parent)->leaves[7]->zone_id

所以,我们有一个指向叶子指针的指针。(*parent)取消引用该指针(因此获取指针指向的内容)。所以现在我们有一个指向叶子的指针,它是一个 10 的数组,所以我们使用元素 7,这里的指针是用来获取 zone_id 的。

它确实有点复杂,但这远不是我见过的最复杂的结构。如果它对您有帮助,您可以将其分解:

Parent *this_parent = *parent;

Leave *leaf = this_parent->leaves[7];

... use leaf->zone_id;
于 2012-12-28T14:00:10.017 回答
0
(
  (
    (
      (
        (
          *(parent)
        )
        ->leaves
      )
    )
    [7]
  )
  ->zone_id
)
  • 取消引用parent
  • 访问leaves会员
  • 索引第7th 个元素
  • 访问该zone_id成员。
于 2012-12-28T14:01:44.730 回答