2016-05-15 45 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

相關問題