指针指向访问

时间:2012-12-28 13:50:29

标签: c++ pointers tree

有人可以向我解释一下:

(((((*(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];

};

3 个答案:

答案 0 :(得分: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] |
                           | ...       |

答案 1 :(得分: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;

答案 2 :(得分:0)

(
  (
    (
      (
        (
          *(parent)
        )
        ->leaves
      )
    )
    [7]
  )
  ->zone_id
)
  • 取消引用parent
  • 访问leaves成员
  • 索引7元素
  • 访问zone_id成员。