Динамическая структура с динамическим массивом внутри - C (СИ)
Формулировка задачи:
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <malloc.h>
- struct complex
- {
- int x;
- int y;
- int *hello;
- };
- int main()
- {
- setlocale(LC_ALL, "rus");
- complex *p;
- int i, n;
- printf("Введите n: ");
- scanf("%d", &n);
- p = (complex*)malloc(sizeof(complex)*n);
- p->hello = ( int* ) malloc(sizeof(int)*3*n);
- for( i = 0; i < n; i++ )
- {
- printf("\nВведите p[%d].x = ", i);
- scanf("%d", &p[i].x);
- printf("\nВведите p[%d].y = ", i);
- scanf("%d", &p[i].y);
- printf("\nВведите p[%d].hello[0] = ", i);
- scanf("%d", &p[i].hello[0]);
- printf("\nВведите p[%d].hello[1] = ", i);
- scanf("%d", &p[i].hello[1]);
- printf("\nВведите p[%d].hello[2] = ", i);
- scanf("%d", &p[i].hello[2]);
- }
- for( i = 0; i < n; i++ )
- {
- printf("\n%d", p[i].x);
- printf("\n%d", p[i].y);
- printf("\n%d", p[i].hello[0]);
- printf("\n%d", p[i].hello[1]);
- printf("\n%d", p[i].hello[2]);
- }
- free(p);
- while(1);
- }
Решение задачи: «Динамическая структура с динамическим массивом внутри»
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <malloc.h>
- struct complex
- {
- int x;
- int y;
- int *hello;
- };
- void getmemory(complex **, int );
- int main()
- {
- setlocale(LC_ALL, "rus");
- complex *p;
- int i, n;
- printf("Введите n: ");
- scanf("%d", &n);
- p = (complex*)malloc(sizeof(complex)*n);
- p->hello = (int *)malloc( sizeof( int ) * 3 );
- for( i = 0; i < n; i++ )
- {
- printf("\nВведите p[%d].x = ", i);
- scanf("%d", &p[i].x);
- printf("\nВведите p[%d].y = ", i);
- scanf("%d", &p[i].y);
- printf("\nВведите p[%d].hello[0] = ", i);
- scanf("%d", &p[i].hello[0]);
- printf("\nВведите p[%d].hello[1] = ", i);
- scanf("%d", &p[i].hello[1]);
- printf("\nВведите p[%d].hello[2] = ", i);
- scanf("%d", &p[i].hello[2]);
- }
- for( i = 0; i < n; i++ )
- {
- printf("\n1. %d", p[i].x);
- printf("\n2. %d", p[i].y);
- printf("\nD3. %d", p[i].hello[0]);
- printf("\nD4. %d", p[i].hello[1]);
- printf("\nD5. %d", p[i].hello[2]);
- printf("\n");
- }
- free(p);
- getmemory( &p, n );
- for( i = 0; i < n; i++ )
- {
- printf("\n1. %d", p[i].x);
- printf("\n2. %d", p[i].y);
- printf("\nD3. %d", p[i].hello[0]);
- printf("\nD4. %d", p[i].hello[1]);
- printf("\nD5. %d", p[i].hello[2]);
- printf("\n");
- }
- free(p);
- while(1);
- }
- void getmemory(complex** ptr, int size)
- {
- int i;
- *ptr = (complex *)malloc( sizeof( complex ) * size );
- (*ptr + i)->hello = (int*) malloc(sizeof(int) * 3);
- for( i = 0; i < size; i++ )
- {
- printf("\nВведите p[%d].x = ", i);
- scanf("%d", ptr[i]->x);
- printf("\nВведите p[%d].y = ", i);
- scanf("%d", ptr[i]->y);
- printf("\nВведите p[%d].hello[0] = ", i);
- scanf("%d", ptr[i]->hello[0]);
- printf("\nВведите p[%d].hello[1] = ", i);
- scanf("%d", ptr[i]->hello[1]);
- printf("\nВведите p[%d].hello[2] = ", i);
- scanf("%d", ptr[i]->hello[2]);
- }
- }
Объяснение кода листинга программы
В этом коде определен тип структуры complex
с полями x
, y
и динамическим массивом hello
типа int.
Структура используется для создания динамического массива структур с помощью функции malloc
.
Пользователю предлагается ввести значения для полей x
, y
и элементов массива hello
для каждого элемента массива структур.
Значения сохраняются в переменных соответствующих полей структуры.
Затем выводится содержимое всех полей структуры на экран.
После этого память, выделенная под массив структур, освобождается с помощью функции free
.
Затем снова запрашивается размер массива и выделяется память под новый массив структур с помощью функции getmemory
.
Затем снова запрашиваются значения для полей структуры и выводятся на экран.
После этого память, выделенная под новый массив структур, освобождается с помощью функции free
.
В конце программы установлен бесконечный цикл, который никогда не завершается (while(1)).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д