Linux c:零长数组

1、零长数组

    GNU C允许声明长度为零的数组,但它只能被用于结构体的最后一个成员。

 

实例:

#include <stdio.h>
#include <stdlib.h>

typedef struct pos
{
    double lon;
    double lat;
}tPos;
 
struct line {
    int length;
     tPos pos[0];
};
 
int main(void)
{
    int i, count = 9;
    
    struct line *thisline = (struct line *)malloc(sizeof(int) + sizeof(tPos)* count + 1);
    
    thisline->length = count;
    for (i = 0; i < count; i++)
    {
        thisline->pos[i].lon =  121.175581 - i;
        thisline->pos[i].lat =  31.567345 + i;
    
    }
       
    
    printf("sizeof(struct line) = %d\n", sizeof(struct line));
    
    for (i = 0; i < thisline->length; i++)
    {
        printf("thisline->pos[%d].lon = %f\n", i,thisline->pos[i].lon);
        printf("thisline->pos[%d].lat = %f\n", i,thisline->pos[i].lat);

    }

    
    return 0;
}

输出:

sizeof(struct line) = 8
thisline->pos[0].lon = 121.175581
thisline->pos[0].lat = 31.567345
thisline->pos[1].lon = 120.175581
thisline->pos[1].lat = 32.567345
thisline->pos[2].lon = 119.175581
thisline->pos[2].lat = 33.567345
thisline->pos[3].lon = 118.175581
thisline->pos[3].lat = 34.567345
thisline->pos[4].lon = 117.175581
thisline->pos[4].lat = 35.567345
thisline->pos[5].lon = 116.175581
thisline->pos[5].lat = 36.567345
thisline->pos[6].lon = 115.175581
thisline->pos[6].lat = 37.567345
thisline->pos[7].lon = 114.175581
thisline->pos[7].lat = 38.567345
thisline->pos[8].lon = 113.175581
thisline->pos[8].lat = 39.567345

 

注意:在分配空间大小时,需要分配足够的大小,否则结果可能为随机数据;

跨平台使用时,不一定可移植

转载于:https://www.cnblogs.com/Pan-Z/p/11528053.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值