R7TSN Ответов: 2

Вызов по значению & вызов по ссылке в C [calc площадь и объем сферы]


I have to write a sphere () function that calculates the area and volume of a sphere. The function receives three transfer parameters: the radius and two pointers to double variables, in which the function sphere () writes back the area and the volume of the sphere . The input and output takes place in main (). 

For a sphere with radius R the following applies: area = 4 * PI * R * R, volume = 4 * PI * R * R * R / 3




Что я уже пробовал:

До сих пор я пришел к этому, это буквально не так много, но я не знаю, как это сделать
#include <stdio.h>
#define pi 3.14159
void sphere(double*, int*);

int main(void) {

    setvbuf(stdout, NULL, _IONBF, 0);
    setvbuf(stderr, NULL, _IONBF, 0);


  
    return 0;
}
void sphere() {
   
}

2 Ответов

Рейтинг:
9

Rick York

Мне почти нечего добавить к решению Мистера Гриффа. Всего несколько деталей :

#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>       // defines PI and various mathematical things

void sphere( double radius, double * pVolume, double * pArea )
{
}


int main(void)
{
    double radius = 2.5;
    double volume = 0;
    double area = 0;
 
    sphere( radius, & volume, & area );

    // output values

    return 0;
}


Rick York

Примечание : math.h определяет константы с ведущим префиксом M_. Пи M_PI.

CPallini

5.

KarstenK

использование термина "объекты" вводит в заблуждение.

Rick York

Думаю, гриф знал, а я нет.

Рейтинг:
17

OriginalGriff

Если не указано иное, все параметры функции в C передаются по значению, а не по ссылке, что означает, что копия объектов передается функции, и изменения в этой копии не повлияют на внешний мир.
Если вы подумаете об этом, это имеет большой смысл.
Что, если он был передан по ссылке?

void foo(int bar)
   {
   bar = bar * 2;
   }
...
int x = 666;
foo(x);
это не вызовет никаких проблем, и x будет содержать новое значение.
Но что произойдет, если мы сделаем это?
void foo(int bar)
   {
   bar = bar * 2;
   }
...
foo(666);
Следует ли изменять значение константы? Это не очень хорошая идея, совсем нет!

Чтобы указать C на передачу по ссылке, вы передаете указатель на значение:
void foo(int* bar)
   {
   *bar = *bar * 2;
   }
...
int x = 666;
foo(&x);
И система теперь не позволит вам передать константу, только переменную!

Видеть здесь: Вызов функции по ссылке в C - Tutorialspoint[^]


CPallini

5.