Я всегда программировал на Java, и, вероятно, поэтому меня это так смущает:
В Java я объявляю указатель:
int[] array
и инициализирую его или назначаю ему некоторую память :
int[] array = {0,1,0}
int[] array = new int[3]
Теперь в C все так запутанно. Сначала я думал, что это так же просто, как объявить его:
int array[]
и инициализировать его или назначить ему память:
int array[] = {0,1,0}
int array[] = malloc(3*sizeof(int))
int array[] = calloc(3,sizeof(int))
Если я не ошибаюсь, все вышеперечисленное эквивалентно Java-C, верно?
Затем, сегодня я встретил код, в котором нашел следующее:
pthread_t tid[MAX_OPS];
и несколько строк ниже, без какой-либо инициализации ...
pthread_create(&tid[0],NULL,mou_usuari,(void *) 0);
Удивительно (по крайней мере, для меня), код работает! По крайней мере, в Java это вернет красивое «NullPointerException»!
Итак, по порядку:
Я прав со всеми «переводами» Java-C ?
Почему этот код работает?
Есть ли разница между использованием malloc (n * sizeof (int))
и calloc (n, sizeof (int))
?
Заранее спасибо