2016-05-15 26 views
0

对于下面的代码,为什么在这种情况下arrayname [i]不等于*(arrayname + i)很奇怪:为什么在这种情况下,在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; 
} 
+0

您的代码与您的问题不符。你正确地说'a [i]'和'*(a + i)'是一样的。你的代码包含'pfish [0]',根据该规则与'*(pfish + 0)'相同。到现在为止还挺好。但是你的代码示例包含'(* pfish.kind)',它与'*(pfish + 0)'完全不同。 –

+0

@ M.M是的,我明白了,谢谢。我只是没有意识到(* pfish.kind)与(* pfish).kind不同 –

回答

4

.运营商和运营商->比一元*运营商更高的优先级。

你必须访问成员之前添加括号具有*计算像

cout << ((*pfish).kind); 
1

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

* pfish.kind等于*(pfish.kind)和pfish是指针类型,所以您需要使用运营商- >而不是运营商访问它的成员,所以你的编译器抱怨它。

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

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

相关问题