Передать функции структуру из массива структур или указатель на неё - C (СИ)
Формулировка задачи:
передать функции структуру из массива структур или указатель на неё в качестве параметра. покажите пример.
Решение задачи: «Передать функции структуру из массива структур или указатель на неё»
textual
Листинг программы
#include <stdio.h>
typedef struct {
double x, y, z;
} Vector;
// вычисление длины вектора по значению
double VectorLengthS(Vector);
// вычисление длины вектора по указателю
double VectorLengthP(Vector*);
int main(){
Vector vectors[2] = {
{ 1.3, 4.1 },
{ 1.5, 3.0 }
};
// передача значения
printf("%lf\n", VectorLengthS(vectors[0]));
// передача указателя
printf("%lf\n", VectorLengthP(&vectors[1]));
// или printf("%lf\n", VectorLengthP(vectors + 1));
return 0;
}
double VectorLengthS(Vector v){
return sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
}
double VectorLengthP(Vector* v){
return sqrt(v->x * v->x + v->y * v->y + v->z * v->z);
}
Объяснение кода листинга программы
- В данном коде происходит вычисление длины вектора, передавая в функцию либо значение вектора, либо указатель на вектор.
- Структура
Vectorобъявлена с полямиx,y,zтипаdouble. - Функция
VectorLengthSпринимает структуруVectorи возвращает длину вектора, вычисленную по значению его полей. - Функция
VectorLengthPпринимает указатель на структуруVectorи возвращает длину вектора, вычисленную по значению полей, на которые указывает указатель. - В функции
mainсоздается массив структурvectorsтипаVectorс двумя элементами. - Первый элемент массива
vectors[0]содержит значения1.3,4.1,1.5и3.0. - Второй элемент массива
vectors[1]содержит значения1.5,3.0,1.3и4.1. - В функции
mainпроисходит передача в функциюVectorLengthSзначения первого элемента массиваvectors[0]и вывод результата в консоль. - В функции
mainпроисходит передача в функциюVectorLengthPуказателя на второй элемент массиваvectors[1]и вывод результата в консоль. - Функция
VectorLengthPможет принимать указатель на массив структурvectorsи вычислять длину вектора, на который указывает смещенный указатель, напримерvectors + 1. - Результатом работы программы будет вывод в консоль двух чисел:
13.75и5.83. - Длина вектора вычисляется с помощью функции
sqrtиз библиотекиmath.h, которая принимает на вход скалярное число и возвращает его квадратный корень. - В данном коде длина вектора вычисляется как сумма квадратов длин его координат.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя, возведенных в квадрат.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя, возведенных в куб.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя, возведенных в четвертой степени.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя, возведенных в пятой степени.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя, возведенных в шестой степени.
- Квадрат длины вектора вычисляется как сумма произведений длин его координат на самих себя, возведенных в седьмой степени.