首页 新闻 会员 周边

C语言,在结构体中定义数组问题

0
悬赏园豆:20 [已解决问题] 解决于 2013-10-14 13:14

有如下结构体定义

typedef struct
{
        int oper;
        int nops;
        struct nodeTypeTag *op[1];  // nodeTypeTag定义省略  
}oprNodeType;

这里声明了一个nodeTypeTag* 数组,看上去似乎只有一个元素的位置

但是在使用到这个结构体的代码中有

oprNodeType *p;
/* 中略 */
p->op[1] = ...
p->op[2] = ...

这里怎么又能操作p->op[1]和p->op[2]呢?

或者之前定义的时候那个元素个数其实是无关的?

飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:209
提问于:2013-10-10 14:21
< >
分享
最佳答案
0

这是一种常见的使用动态数组的技巧。C语言编译器并不会检查[]中间的是否会越界,只要运行的时候分配足够大的空间就可以了。

typedef struct {
int size;
int n[1];
}ARR;

int main(void)
{
ARR *p = (ARR*)malloc(sizeof(ARR) + sizeof(int)*100);
ARR a;
//a.n[100] = 10; //wrong
p->n[100] = 10; //correct
printf("%d",p->n[100]);
return 0;
}

收获园豆:20
嗷嗷 | 小虾三级 |园豆:757 | 2013-10-11 10:54

感谢

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2013-10-14 13:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册