Что на самом деле произошло в следующей программе, я определил пустой массив int arr[];
в коде и компиляторе GCC, но компилятор не дает ошибку. Он успешно работает.Определенный пустой массив в c
#include <stdio.h>
#include <stdlib.h>
typedef struct st
{
int i;
int arr[];
}ST,*ptr;
int main()
{
ST s1;
ptr p1= (ptr)malloc(sizeof(ST)+4*sizeof(int));
p1->i=10;
p1->arr[0]=1;
p1->arr[3] = 1;
printf("%d\n",p1->arr[3]);
printf("%ld\n", sizeof(s1));
}
C
язык не имеет длину неопределенного массива. но GCC компилятор разрешено. Зачем?
Просто любопытно, что на самом деле происходит?
стандарт Си позволяет это. Найдите «гибкий элемент массива». – haccks
[Элемент гибкого массива] (https://en.wikipedia.org/wiki/Flexible_array_member), два предложения: не бросайте 'malloc' и не скрывайте указатели с' typedef ' –
В качестве последнего члена struct, полезно, когда структура хранит переменный объем данных. –