Ошибка при передаче указателя функции - C (СИ)
Формулировка задачи:
Привет!
В моем понимании приведенный ниже код должен дважды выводить одно и то же. Объясните мне, почему это не так.
Код:
Собственно, результат работы:
#include <stdio.h> #include <stdlib.h> void func(int *a, int *s); int main(int argc, char *argv[]){ int *array; int size, i; func(array, &size); for (i=0; i<size; i++) printf("%i\n", array[i]); } void func(int *a, int *s) { int j=0; *s = 5; a = (int *) malloc(sizeof(int) * *s); for(j=0; j < *s; j++) a[j] = j+5; for (j=0; j < *s; j++) printf("%i\n", a[j]); }
5 6 7 8 9 1412476 -1216677816 4922752 1382974 1382990
Решение задачи: «Ошибка при передаче указателя функции»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> void func(int **array, size_t *size); int main(void) { int *array, i; size_t size; func(&array, &size); for(i = 0; i < size; ++i) printf("%d\n", array[i]); exit(0); } void func(int **array, size_t *size) { int j; *size = 5; *array = malloc(*size * sizeof **array); for(j = 0; j < *size; ++j) (*array)[j] = j + 5; for(j = 0; j < *size; ++j) printf("%d\n", (*array)[j]); }
Объяснение кода листинга программы
- Объявлены две функции:
func
иmain
. - В функции
main
выделена память под указательarray
и переменнуюsize
типаsize_t
. - Вызвана функция
func
с передачей указателей наarray
иsize
в качестве аргументов. - В функции
func
выделена память под массив*array
указанного размера. - Выполнена итерация по всем элементам массива и каждому элементу присвоено значение
j + 5
. - Выполнена итерация по всем элементам массива и выведено значение каждого элемента.
- В функции
main
выполнена итерация по всем элементам массива и выведено значение каждого элемента. - Программа завершена с помощью
exit(0)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д