使用结构数组初始化结构指针

时间:2012-01-12 03:55:01

标签: arrays pointers initialization structure

我有一个疑问

我有一个结构数组。在我将它直接初始化并在我的代码中使用之前。 但我被建议使用指针而不是直接结构。但我无法正确指向结构数组的指针。

typedef struct 
{
    int a;
    int b;
} cqiReport;


cqiReport s_cqiReport[2][2];    
cqiReport *ptr[2], *ptr2, *ptr3;
s_cqiReport[0][0].a=1;
s_cqiReport[0][0].b=1;
*ptr= s_cqiReport;
    *ptr2= s_cqiReport[0][0];
    *ptr3= s_cqiReport[1][0];

我得到ptr [0]正确指向s_cqiReport [0] [0],但是ptr [2]指向一些垃圾。 我如何得到ptr2 [1]指向s_cqiReport [1] [0]?

请帮助 谢谢 DSP家伙

2 个答案:

答案 0 :(得分:0)

好的,这有点乱。你有s_cqiReport作为多维数组,ptr作为单维数组。这条线

*ptr = s_cqiReport 

没有意义。

此外,您尚未将任何内容初始化为cqiReport的实际实例。

请尝试以下操作。

cqiReport *foo = new cqiReport;
foo->a = 9;
foo->b = 3;

这不能回答你的问题,但它应该会有所帮助。

答案 1 :(得分:0)

你必须意识到数组实际上是一个指针,所以*ptr已经指向s_cqiReport[0][0],因为它等于s_cqiReport,它本身就是一个指针。

现在,如果你想让你的指针指向一个值,你必须使用&运算符,这实际上意味着“地址”,所以像ptr3= &(s_cqiReport[1][0])之类的东西使指针指向你想要它。

同样,我相信ptr3 = s_cliReport + 2也会导致ptr3指向您希望它指向的位置,但我会避免在您的指针上执行算术运算,直到您对指针及其工作方式有深刻的理解。

相关问题