C++ 解引用与阵列访问

C++ 解引用与阵列访问,c++,gcc,C++,Gcc,我有一个具有此成员函数的类 void AddTo(vertex** vrtList) { if(*vrtList != 0) { *vrtList->m_vrtLast = this; } m_vrtNext = *vrtList; // save existing list, if any m_vrtLast = 0; *vrtList = this; } gcc给我一个错误消息 错误:请求“*vrtList”中的成员“m_vrtLast”,该成员属于非类

我有一个具有此成员函数的类

void AddTo(vertex** vrtList) {
  if(*vrtList != 0) {
    *vrtList->m_vrtLast = this;
  }
  m_vrtNext = *vrtList;  // save existing list, if any
  m_vrtLast = 0;
  *vrtList = this;
}
gcc给我一个错误消息

错误:请求“*vrtList”中的成员“m_vrtLast”,该成员属于非类类型“vertex*”


如果我将
*vrtList->m_vrtList
替换为
vrtList[0]->m_vrtList
,编译器将接受它,代码工作正常


这是一个bug(在gcc中)还是一个特性(在C/C++中)?

这与
操作符的优先级有关*


*vrtList->m_vrtLast
并不等同于
(*vrtList)->m_vrtLast
,而是
*(m_vrtList->m_vertLast)


因此,您必须相应地添加括号。

这是关于
运算符的优先级的问题*


*vrtList->m_vrtLast
并不等同于
(*vrtList)->m_vrtLast
,而是
*(m_vrtList->m_vertLast)


因此,您必须相应地添加括号。

这不是一个错误,而是由于。运算符
->
的优先级高于
*
,因此
*vrtList->m_vrtLast
*(vrtList->m_vrtLast)
相同,这不是您想要的

[]
->
具有相同的优先级,但从左到右读取,因此在
->
之前遇到
[]


使用
[]
(*vrtList)->m_vrtList

这不是一个bug,而是由于。运算符
->
的优先级高于
*
,因此
*vrtList->m_vrtLast
*(vrtList->m_vrtLast)
相同,这不是您想要的

[]
->
具有相同的优先级,但从左到右读取,因此在
->
之前遇到
[]


使用
[]
(*vrtList)->m_vrtLast

(*vrtList)->m_vrtLast
可能会有更好的机会做你想做的事情。不,它不是一只虫子;这是一个优先问题。试着用vrtList->m_vrtLast替换*vrtList->m_vrtLast如果你是正确的,它会。vrtList[0]也是如此。因此,信息是后缀运算符优先于前缀运算符。功能,而不是bug。@user1929959不。那不会给他想要的东西。
(*vrtList)->m_vrtLast
可能会有更好的机会做你想要的事情。不,它不是一只虫子;这是一个优先问题。试着用vrtList->m_vrtLast替换*vrtList->m_vrtLast如果你是正确的,它会。vrtList[0]也是如此。因此,信息是后缀运算符优先于前缀运算符。功能,而不是bug。@user1929959不。这不会给他想要的。对于他想要的,(*vrtList)是唯一正确的方法。vrtList[0]是一种不好的做法。对于他想要的东西,(*vrtList)是唯一正确的方法。vrtList[0]是一种不好的做法。