• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Działanie Funkcji. Jak ona to rozumie? /*prosze o szybką odpowiedż*/

Object Storage Arubacloud
0 głosów
377 wizyt
pytanie zadane 20 czerwca 2018 w C i C++ przez Elijah Romashchenko Nowicjusz (220 p.)

Dzień dobry! Mam taki kod, do przykładu: 

#include <cmath>
#include <iostream>

double quadratic(double *x1, double *x2, double a, double b, double c) {
	
	double delta = pow(b, 2.0) - 4 * a * c;

	
	if (delta >= 0.0) {
		*x1 = ((-1) * b - sqrt(delta)) / (2 * a);
		*x2 = ((-1) * b + sqrt(delta)) / (2 * a);
	}

	return delta;
}

int main() {
	double delta, x1, x2;

	delta = quadratic(&x1, &x2, 1.2, 3.7, -4);
	std::cout << delta << std::endl;
	std::cout << x1 << " " << x2 << std::endl;

	return 0;
}

Pytanie brzmi następujące. Funkcja main odwołuje się do funkcji quadratic z już podanymi danymi (czyli 1.2, 3.7, -4) ale ja nie rozumiem skont tak naprawdę funkcja quadratic zna że w tym miejscu gdzie deklarujemy double a, potrzebne podstawić 1.2, w double b - 3.7 itd. ? I czy to zawsze działa takim cudem?


P.S. Prosiłbym o przykładzie jeżeli jest to możliwe.

 

Dziękuję z gory!  

komentarz 20 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)
1. skąd tak naprawdę ....

2. funkcja quadratic wie
komentarz 20 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)
I w sumie nie mam siły żeby to tłumaczyć, nie chce mi się babrać w aśmie
komentarz 20 czerwca 2018 przez Elijah Romashchenko Nowicjusz (220 p.)

@Swipeyro, Dzięki? 

2 odpowiedzi

0 głosów
odpowiedź 20 czerwca 2018 przez RafalS VIP (122,820 p.)

Trochę jestem niepewny o co Ci tak na prawdę chodzi, gdyż z użytkowego punktu widzenia funkcji musisz wiedzieć tylko, że argumenty są przypisywane w wywolaniu funkcji do zmiennych według kolejności podania w wywołaniu:

void f(int a, int b)
{
    std::cout<<"a = "<<a<<endl;
    std::cout<<"b = "<<b<<endl;
}
int main()
{
    f(1,2); // 1 przypisane do a, 2 do b
    f(2,1); // na odwrot
}

Jeśli natomiast pytasz jak to działa na jeszcze niższym poziomie to muszę odpowiedzieć, że nie wiem, bo przez ostatnie kilka lat programowania nie była mi potrzebna ta wiedza i jeśli Ty akurat nie piszesz swojego języka to pewnie i Tobie się nie przyda :P

komentarz 20 czerwca 2018 przez kenjiro244 Dyskutant (8,600 p.)
Wydaje mi się że nie oto chodziło autorowi, chodziło mu chyba o zmienne x1 i x2 które podczas wywołania funkcji nie są znane a następnie odwołuje się do nich w lini 22 i odczytuje ich wartości
komentarz 20 czerwca 2018 przez RafalS VIP (122,820 p.)

Jak patrzę w ten kod to prawdopodobnie masz rację, ale pytanie brzmiało tak

skont tak naprawdę funkcja quadratic zna że w tym miejscu gdzie deklarujemy double a, potrzebne podstawić 1.2, w double b - 3.7 itd. ?

 

komentarz 20 czerwca 2018 przez Elijah Romashchenko Nowicjusz (220 p.)

@RafalS,
Właśnie o to mi chodziło, teraz będę wiedział że wszystko przypisuje się po kolei.....Ale powiedziałeś "z punktu widzenia użytkownika". A z punktu widzenia programisty?

 

Dziękuje z gory! 

komentarz 20 czerwca 2018 przez RafalS VIP (122,820 p.)
Użytkownik kodu to programista :P. Z punktu widzenia twórcy języka mógłbyś spytać co tam się dzieje pod spodem w czystych instrukcjach asemblerowych, czyli rozbijając wywołanie funkcji na najbardziej podstawowe operacje wykonywane przez procesor.
komentarz 20 czerwca 2018 przez Elijah Romashchenko Nowicjusz (220 p.)
Właśnie, i na to też liczyłem. Co się dzieje pod  spodem?
komentarz 20 czerwca 2018 przez RafalS VIP (122,820 p.)

...to muszę odpowiedzieć, że nie wiem, bo przez ostatnie kilka lat programowania nie była mi potrzebna ta wiedza i jeśli Ty akurat nie piszesz swojego języka to pewnie i Tobie się nie przyda :P

komentarz 20 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)
No, nie wiem czy ogarniesz :P.

Wejdź na stronkę godbolt.org (bardzo fajna stronka)

i przepisz po lewej swój kod, a po prawej ujrzysz wynik.

Tylko żebyś nie spadł z krzesła..
0 głosów
odpowiedź 20 czerwca 2018 przez j23 Mędrzec (194,920 p.)
edycja 20 czerwca 2018 przez j23

skont tak naprawdę funkcja quadratic zna że w tym miejscu gdzie deklarujemy double a, potrzebne podstawić 1.2, w double b - 3.7 itd. ?

W dużym uproszczeniu parametry funkcji przed jej wywołaniem odkładane są w odpowiedniej kolejności na stos, i z tego stosu są pobierane wewnątrz funkcji (vide ramka stosu). Kolejność odkładania określa konwencja wywołania funkcji (domyślnie na ogół jest to __cdecl - parametry odkładane są od końca).

Podobne pytania

0 głosów
3 odpowiedzi 661 wizyt
pytanie zadane 6 października 2021 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 311 wizyt
0 głosów
1 odpowiedź 289 wizyt
pytanie zadane 16 lipca 2022 w C i C++ przez HUBSON2912 Obywatel (1,300 p.)

92,551 zapytań

141,393 odpowiedzi

319,524 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...