我有这样的结构
struct quantum_reg_struct
{
int width; /* number of qubits in the qureg */
int size; /* number of non-zero vectors */
int hashw; /* width of the hash array */
COMPLEX_FLOAT *amplitude;
};
typedef struct quantum_reg_struct quantum_reg;
quantum_reg reg;
如果* amplitude指向COMPLEX_FLOAT类型的数组的开头,那么我希望能够将它存储在Complex_float类型的数组中。我有可能吗?
其次我需要了解 - >的用法运营商。如果这样的事情被写下来会发生什么。
reg->amplitude[1] *= -1;
答案 0 :(得分:1)
按原样,如果您在不指定振幅的情况下访问振幅,则代码会崩溃。
quantum_reg reg;
reg.amplitude = malloc(5 * sizeof (COMPLEX_FLOAT));
reg.amplitude[0] = 1.2f; // I'm guessing COMPLEX_FLOAT is just a typedef'd float for this to work
reg.amplitude[1] = 1.5f;
// reg->amplitude won't compile because reg is not a pointer.
// if COMPLEX_FLOAT is a struct, then reg.amplitude->fieldname could work, where fieldname is something in COMPLEX_FLOAT.
free(reg.amplitude); // free the allocated memory.
如果幅度具有固定数量的元素,请考虑将其重新定义为数组,例如COMPLEX_FLOAT amplitude[5];
。这更容易使用,因为您不必担心malloc
和free
。 malloc和free的优点是你可以在运行时选择大小(元素数量),但是如果你不需要这个,那么坚持使用数组。
答案 1 :(得分:0)
是的,你可以这样做:
quantum_reg.amplitude = malloc(sizeof(*quantum_reg.amplitude) * n);
现在 - >运算符只是
的捷径(*reg).amplitude