Динамическая структура с динамическим массивом внутри - 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)).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д