Инициализация структуры - C (СИ)
Формулировка задачи:
Есть такой код:
По первой функции вроде всё понимаю, но нифига не понимаю оно не компилируется... т.е. в Си нельзя сначала объявить структуру, а потом инициализировать? Тут только один выход - присваивать значения каждому полю? Или я чего-то не знаю?
Ну и по второй функции - я просто в ступоре то что мне нужно можно делать только через указатель 0_0 !?
typedef struct Point3DStruct { int x; int y; int z; } Point3D; void myFunction1() { Point3D p0 = { 0, 1, 2 }, p1; // вроде ок switch(expr) { case 0: p1 = { 3, 4, 5 }; // нифига не ок break; case 1: p1 = { 6, 7, 8 }; // нифига не ок break; default: p1 = { 9, 8, 7 }; // нифига не ок break; } myFunction2(p1); } void myFunction2(const Point3D &point) { // опять чертовщина /* ... */ }
case 0: p1.x = 3; p1.y = 4; p1.z = 5; // жесткач :[ break;
void myFunction2(Point3D *point) { /* ... */ } myFunction2(&p1);
Решение задачи: «Инициализация структуры»
textual
Листинг программы
#include <stdio.h> typedef struct { int x; int y; int z; } Point3D; int expr; void myFunction1(); void myFunction2(const Point3D *point); int main(void) { myFunction1(); return 0; } void myFunction1() { Point3D p0 = { 0, 1, 2 }, p1; // вроде ок scanf("%d", &expr); switch (expr) { case 0: p1 = (Point3D) { 3, 4, 5 }; // нифига не ок break; case 1: p1 = (Point3D) { 6, 7, 8 }; // нифига не ок break; default: p1 = (Point3D) { 9, 8, 7 }; // нифига не ок break; } myFunction2(&p1); } void myFunction2(const Point3D *point) { // опять чертовщина printf("x=%d y=%d z=%d", point->x, point->y, point->z); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы сprintf и структурой Point3D
- Объявляем структуру Point3D, которая содержит три поля типа int (x, y, z)
- Объявляем переменную expr типа int, которая будет использоваться в операторе switch
- Объявляем две функции: myFunction1 и myFunction2. myFunction1 не принимает аргументов, а myFunction2 принимает указатель на структуру Point3D
- В функции main вызываем myFunction1
- В функции myFunction1 инициализируем структуру Point3D p0 значениями 0, 1, 2 соответственно
- Считываем значение переменной expr с помощью функции scanf
- Используем оператор switch для присвоения значения структуре p1 в зависимости от значения переменной expr
- В случае expr равно 0, присваиваем структуре p1 значения 3, 4, 5
- В случае expr равно 1, присваиваем структуре p1 значения 6, 7, 8
- В случае expr равно 2, присваиваем структуре p1 значения 9, 8, 7
- Вызываем функцию myFunction2, передавая ей указатель на структуру p1
- В функции myFunction2 выводим значения полей структуры Point3D на экран с помощью функции printf
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д