* (Arrayname + i) ist Für den folgenden Code, warum Arrayname [i] in diesem Fall ungleich * (Arrayname + i) und die Ausgabe kann sein seltsam:Warum ArrayName [i] in diesem Fall nicht in C++
#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;
}
Ihr Code ist Ihre Frage nicht überein. Sie geben richtig an, dass 'a [i]' dasselbe ist wie '* (a + i)'. Ihr Code enthält 'pfish [0]', was nach dieser Regel mit '* (pfish + 0)' übereinstimmt. So weit, ist es gut. Aber dann enthält dein Codebeispiel '(* pfish.kind)' ', was völlig anders als' * (pfish + 0) 'ist. –
@ M.M Ja ich sehe, danke. Ich habe einfach nicht bemerkt, dass (* pfish.kind) anders ist als (* pfish) .kind –