为什么arrayname [i]在这种情况下不等于*(arrayname + i)在C ++中

时间:2016-05-15 03:32:50

标签: c++

对于下面的代码,为什么arrayname [i]在这种情况下不等于*(arrayname + i),输出可能很奇怪:

#include <iostream>
using namespace std;

struct fish
{
    char kind[10] = "abcd";
    int weight;
    float length;
};

int main()
{
    int numoffish;
    cout << "How many fishes?\n";
    cin >> numoffish;
    fish *pfish = new fish[numoffish];
    cout << pfish[0].kind << endl; //the output is "abcd"

    /*if the above code is changed to
    "cout << (*pfish.kind);"
     then compile error happens */

    /*and if the above code is changed to
    "cout << (*pfish->kind);"
    then the output is only an "a" instead of "abcd"*/

    delete [] pfish;
    return 0;
}

2 个答案:

答案 0 :(得分:4)

.运算符和->运算符的优先级高于一元*运算符。

在访问

等成员之前,您必须添加括号以计算*
cout << ((*pfish).kind);

答案 1 :(得分:1)

(* pfish).kind等于pfish [0] .kind

* pfish.kind等于*(pfish.kind),而pfish是指针类型,因此您需要在其上使用运算符 - &gt; 而不是运算符访问它的成员,因此你的编译器抱怨它。

另外* pfish-&gt;种类是*(pfish-&gt;种类),pfish-&gt;种类是char [10]类型的“abcd”,所以dereferencnig它是一个char,它等于pfish-&gt ;亲切[0],所以它只输出'a'。

C ++运算符优先级:http://en.cppreference.com/w/cpp/language/operator_precedence