Linux c:ゼロ長配列
3817 ワード
1、ゼロ長配列
GNU Cでは、長さがゼロの配列を宣言できますが、構造体の最後のメンバーにのみ使用できます.
例:
出力:
sizeof(struct line) = 8thisline->pos[0].lon = 121.175581thisline->pos[0].lat = 31.567345thisline->pos[1].lon = 120.175581thisline->pos[1].lat = 32.567345thisline->pos[2].lon = 119.175581thisline->pos[2].lat = 33.567345thisline->pos[3].lon = 118.175581thisline->pos[3].lat = 34.567345thisline->pos[4].lon = 117.175581thisline->pos[4].lat = 35.567345thisline->pos[5].lon = 116.175581thisline->pos[5].lat = 36.567345thisline->pos[6].lon = 115.175581thisline->pos[6].lat = 37.567345thisline->pos[7].lon = 114.175581thisline->pos[7].lat = 38.567345thisline->pos[8].lon = 113.175581thisline->pos[8].lat = 39.567345
注意:割り当てスペースが大きい場合は、十分なサイズを割り当てる必要があります.そうしないと、結果はランダムなデータになる可能性があります.
プラットフォーム間で使用する場合、必ずしも移植可能ではありません.
転載先:https://www.cnblogs.com/Pan-Z/p/11528053.html
GNU Cでは、長さがゼロの配列を宣言できますが、構造体の最後のメンバーにのみ使用できます.
例:
#include
#include
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
", sizeof(struct line));
for (i = 0; i < thisline->length; i++)
{
printf("thisline->pos[%d].lon = %f
", i,thisline->pos[i].lon);
printf("thisline->pos[%d].lat = %f
", i,thisline->pos[i].lat);
}
return 0;
}
出力:
sizeof(struct line) = 8thisline->pos[0].lon = 121.175581thisline->pos[0].lat = 31.567345thisline->pos[1].lon = 120.175581thisline->pos[1].lat = 32.567345thisline->pos[2].lon = 119.175581thisline->pos[2].lat = 33.567345thisline->pos[3].lon = 118.175581thisline->pos[3].lat = 34.567345thisline->pos[4].lon = 117.175581thisline->pos[4].lat = 35.567345thisline->pos[5].lon = 116.175581thisline->pos[5].lat = 36.567345thisline->pos[6].lon = 115.175581thisline->pos[6].lat = 37.567345thisline->pos[7].lon = 114.175581thisline->pos[7].lat = 38.567345thisline->pos[8].lon = 113.175581thisline->pos[8].lat = 39.567345
注意:割り当てスペースが大きい場合は、十分なサイズを割り当てる必要があります.そうしないと、結果はランダムなデータになる可能性があります.
プラットフォーム間で使用する場合、必ずしも移植可能ではありません.
転載先:https://www.cnblogs.com/Pan-Z/p/11528053.html