Das geht auch in C genauso. Dann hast du ein Array aus Structs. Die Inhalte des Structs liegen dann direkt hintereinander im Speicher. Lediglich die Länge ist halt zur Compile-Zeit vorgegeben. Wenn du da Speicher allozierst dann musst du "Anzahl der Structs * sizeof(Struct)" machen. Sowie du es da stehen hattest. Der Pointer der da von malloc/calloc zurückkommt ist auf struct, da Arrays in C eben nur Pointer auf das erste Element sind. Aber du musst den trotzdem deinem Array zuweisen.
Oder du machst "CMD_Record* CMD_Sequence[10]" (und danach mit memset alles auf NULL zu setzen). Dann hast du ein Array aus 10 Pointern auf Structs. Dabei bist du genauso in der Länge limitiert, aber jeder Pointer hat nur 2 Byte und die Structs müssen nicht existieren(!). Das ließe sich einfacher in ein größeres Array kopieren wenn du mehr willst. Du würdest dann die Structs jeweils einzeln allozieren und die Pointer die du mit calloc bekommst sequentiell in das Array schreiben. Und selbst wenn du 50 Pointer hast, sind das nur 100 Byte und nicht 50 * 3 * 2 Byte, wie wenn du 50 structs mit je 3 Integern erzeugst und dann die Hälfte nicht brauchst.