Funkcje, ogólna struktura funkcji. Umieszczanie definicji funkcji w programie. Zmienne lokalne i globalne. Zasięg i widzialność identyfikatorów.
#include "stdafx.h"
#include <iostream>
// Funkcja inline
inline double square(double x) { return x*x;};
// Funkcja zachowujaca wartosc na ktora wskazuje wskaznik i zwracajaca nowy wynik
float square(float const * x);
// Modyfikacja wartosci pod adresem wskazywanym przez wskaznik i zwrocenie dodatkowo adresu modyfikowanej wartosci
float *psquare(float * x);
// Alternatywne do wskaznikow przekazywanie przez referencje
void square(float &x);
float psquare(float const &x);
/**
* Funkcje inline wystepuja w C++, C tej funckji nie posiada.
* Program demonstrujacy tworzenie, wywolywanie i dzialanie funkcji inline, jak i pozostalych funkcji
* @author Marcin Mironczuk
*/
int main()
{
double a = 0;
std::cout << "Podaj wartosc a: " << std::endl;
std::cin >> a;
std::cout << "Kwadrat liczby to: " << square(a) << std::endl;
double *p1 = &a;
std::cout << "Wartosc p1: " << *p1 << std::endl;
std::cout << "Adres p1: " << p1 << std::endl;
std::cout << "Adres a: " << &a << std::endl;
float k = 2;
float *p2 = &k;
std::cout << "Wartosc k: " << square(p2) << std::endl;
std::cout << "Wartosc k: " << *psquare(p2) << std::endl;
std::cout << "Wartosc k po modyfikacji przez *psquare(): " << k << std::endl;
square(k);
std::cout << "Wartosc k po modyfikacji przez square(float &x): " << k << std::endl;
std::cout << "Modyfikacja k poprzez psquare(float const &x): " << psquare(k) << std::endl;
std::cout << "Wartosc k po modyfikacji przez psquare(float const &x): " << k << std::endl;
std::cin.get();
std::cin.get();
return 0;
}
// zabezpiecznie przed modyfikacja wartosci wskazanej
float square(float const * x) {
return (*x)*(*x);
};
float *psquare(float * x) {
*x = (*x)*(*x);
return x;
};
// Troche niebezpiecznie modyfikujemy przekazywana wartosc
void square(float &x) {
x = x*x;
};
// Bardziej bezpieczny sposob
float psquare(float const &x) {
return x*x;
}