我有一个结构x:
struct x {
__s32 array[10];
};
如果我只有指向结构的指针,如何创建指向数组x->array
的指针?
答案 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])