Инициализация массива без размера массива - PullRequest
0 голосов
/ 28 февраля 2020

Может кто-нибудь объяснить, как работает этот массив без размера массива?

#include <stdio.h>

int main(void) {
int a[]={},i;
for(i=0;i<=3;i++)scanf("%d",&a[i]);
printf("\n\n");
for(i=0;i<=3;i++)printf("%d ",a[i]);
return 0; 
}

1 Ответ

0 голосов
/ 28 февраля 2020

В C нет проверки длины массива во время выполнения, как в таких языках, как Java. В этом коде пустой массив создается в некотором месте в памяти. При обращении к массиву с помощью a[i] местоположение в памяти рассчитывается на основе размера элементов (в данном случае размер int) и доступа к этому месту в памяти, независимо от того, действительно ли вы хотите, чтобы к нему обращались или нет , C дает вам право свободно делать все, что не позволяют современные языки.

С одной стороны, это позволяет вам писать очень эффективный код, потому что нет никаких дополнительных затрат на все проверки, кроме с другой стороны, очень легко написать код, который выдает странные ошибки, если вы не полностью осознаёте и не помните, как работает распределение памяти.

Одна из основных причин, по которым были созданы такие языки, как Java, была избавить разработчика от необходимости беспокоиться об этих проблемах. С одной стороны, Java "безопаснее", но с другой стороны наблюдается снижение производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...