指向存储在struct中的数组的指针

时间:2017-01-08 19:17:58

标签: c pointers struct

我有一个结构x:

struct x {
    __s32 array[10];
};

如果我只有指向结构的指针,如何创建指向数组x->array的指针?

2 个答案:

答案 0 :(得分:2)

直接的方法是常用的方法,如

 struct x * ptr = NULL;
 //allocation
 __s32 * otherPtr = ptr->array;  //array name decays to pointer to first member
 __s32 (*p) [10] = &(ptr->array); // pointer to whole array.

否则,还有另一种方法,但对于特殊情况,引用C11,章节§6.7.2.1,结构和联合说明符

  

[...]指向a的指针   结构对象,适当转换,指向其初始成员(或者如果该成员是a   位字段,然后到它所在的单元,反之亦然。可能有未命名的   在结构对象中填充,但不在其开头。

因此,如果数组变量是结构的第一个成员(或者只有成员,如上例所示),那么指向结构变量的指针,适当地转换为正确的类型,也将指向开头数组成员变量。

在这种情况下,您可以使用(__s32 (*)[10])的演员表。

答案 1 :(得分:1)

正确的方法是

__s32 *pointer = x->array

等于

__s32 *pointer = &(x->array[0])