Ich habe ein Array von float rtmp1 [NMAX * 3] [3], und es wird als rtmp1 [i] [n] verwendet, wobei n von 0 bis 2 ist i ist von 0 bis 3 * NMAX - 1. Ich möchte jedoch rtmp1 in rtmp1 [3 * 3 * NMAX] konvertieren. Würde die Adressierung dieses neuen 1D-Arrays als rtmp1 [3 * i + n] äquivalent zu rtmp1 [i] [n] sein? Vielen Dank im Voraus für die Klarstellungen.C++: 2D-Arrays vs. 1D-Array-Unterschiede
Antwort
rtmp1 [i] [n] entspricht rtmp1 ist [i * N MAX + n]
http://www.cplusplus.com/doc/tutorial/arrays/ See, wo Ihr nmax ihre Breite.
Das Hauptziel von dem, was ich versuchte, ist, von einem 2D-Array zu einem Pseudo-2D-Array zu konvertieren. Deine Antwort ist diejenige, die ich akzeptiere. Vielen Dank. – stanigator
Ja, aber was willst du damit beweisen? rtmp1 [i] [n] hätte wahrscheinlich eine bessere Ausführungszeit und ist leichter zu lesen.
"Eigentlich möchten Sie rtmp [i + 3 * n]" verwenden, was ist der Unterschied? Sie tauschen nur Adressen aus.
Ich versuche, rtmp1 dynamisch zuzuordnen, um ein 1D-Array zu sein, da ich seine Größe bis zur Laufzeit nicht kenne. NMAX ist eine wirklich große Zahl, die statisch zugewiesen werden muss, was die aktuelle Implementierung im Hinblick auf den Speicherverbrauch sehr erschwert. – stanigator
Ich bin mir nicht sicher, dass es einige Aliaspräventionsregeln nicht brechen wird. Meine Lektüre ist, dass es in Ordnung ist, aber ich habe mich schon geirrt und der ganze Bereich ist manchmal verwirrend und mutig darauf zu wissen, welche von zwei widersprüchlichen Regeln in verschiedenen Teilen des Standards Priorität hat.
Exemple:
typedef float Point[3];
void f(float* tab, Point* pt)
{
(*pt)[2] = 6;
// I don't think the compiler can assume that (*pt)[2] isn't modified by
tab[5] = 3.141592;
}
// context which give a problem if I'm wrong.
float rtmp1[NMAX*3][3];
float *ptr = &rtmpl[0][0];
f(ptr, rtmpl[1]);
- 1. Signalverarbeitung: C++ vs C#
- 2. statisch vs extern "C"/"C++"
- 3. C - scanf() vs gets() vs fgets()
- 4. CppCMS vs C++ Server Pages vs Wt
- 5. C++ push_back vs Einfügen vs emplace
- 6. Int32 vs. Int64 vs. Int in C#
- 7. löschen vs NULL vs frei in C++
- 8. statisches Array in C# vs C/C++
- 9. Powershell vs C#
- 10. C# HasValue vs! = Null
- 11. C# Sockets vs Pipes
- 12. C++ Funktionszeiger vs Schalter
- 13. Err.Number (VB6 vs. C#)
- 14. C# Form.Close vs Form.Dispose
- 15. C++ - Konzeptprüfung vs Vererbung
- 16. C# readonly vs Holen
- 17. VS 2010 C++ - Konvertierungsfehler
- 18. C# Flags vs FlagsAttribute
- 19. c timeval vs timespec
- 20. C++ * vs [] als Funktionsparameter
- 21. C# Thread VS Process()
- 22. C++ Arrays vs Zeiger
- 23. C# Enum equals() vs ==
- 24. C-Bibliothek vs WinApi
- 25. .Net vs C++ (Leistung)
- 26. ATL VS C++ 2010
- 27. Javascript VS C#
- 28. char vs Wchar_t vs char16_t vs char32_t (C++ 11)
- 29. Operatoren vs Funktionen in C/C++
- 30. C-Zeiger vs. Objective-C-Zeiger
Sollte ich nicht von 0 bis (3 * NMAX) - 1 sein? – KTC
Klärung bitte. Meinst du "ich bin von 0 bis 2" oder rtmp1 [3 * 4 * NMAX]? –
@KTC: ja, und ich habe es korrigiert @billweaver: Bitte klären Sie Ihre Frage. – stanigator