从结构中的指针获取数组

时间:2014-11-12 10:47:19

标签: c pointers struct

我有这样的结构

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;

2 个答案:

答案 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];。这更容易使用,因为您不必担心mallocfree。 malloc和free的优点是你可以在运行时选择大小(元素数量),但是如果你不需要这个,那么坚持使用数组。

答案 1 :(得分:0)

是的,你可以这样做:

quantum_reg.amplitude = malloc(sizeof(*quantum_reg.amplitude) * n);  

现在 - >运算符只是

的捷径
(*reg).amplitude