Когда я скомпилировал следующий код с gcc -Wall -pedantic -ansi -std=c89
, он скомпилировался успешно, не указав ошибку при назначении указателя. Обратите внимание, что я конвертирую из int (*)[4]
в int (*)[]
.
int arr[4];
int (*p_arr)[] = &arr;
Предполагая, что есть какая-то причина для разрешения этого (несовместимого?) назначения, когда я пытаюсь его использовать, компилятор дает ошибку неполного типа error: invalid application of ‘sizeof’ to incomplete type ‘int[]’
.
(void) sizeof(*p_arr);
Эта ошибка заставляет меня подумать, что использовать разрешение предыдущего назначения указателя p_arr = &arr
? Разрешено ли это присвоение стандарту?
Я использовал неполный тип struct/union (обычно для прямого объявления), а также обнаружил ошибку incomplete array element type
. Но это incomplete array type
для меня нова. Возможно ли это в стандарте C и имеет прецедент?