Инициализация структуры - 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