对于下面的代码,为什么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;
}
答案 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