5  Wskaźniki

Zadania należy rozwiązać bez interpretacji wskaźników jako tablic.

  1. Skopiuj lub przepisz kod i sprawdź wyniki na standardowym wyjściu:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("%Iu\n", sizeof(int));
    printf("%Iu\n", sizeof(int*));
    return 0;
}
  1. W jednym pliku wykonaj czynności:
  1. Napisz funkcję copyInt z argumentami: x typu int oraz w, który jest wskaźnikiem do int. Funkcja ma przepisać wartość x do zmiennej wskazywanej przez w. Stwórz przypadek testowy.

  2. Napisz funkcję findMax z dwoma argumentami: wskaźnikiem num1 na stałą wartość typu double i stałym wskaźnikiem num2 na zmienną typu double. Funkcja ma zwracać większą wartość spośród tych, na które wskazują num1 i num2. Utwórz przypadek testowy.

  3. Napisz funkcję initInts, która nie przyjmuje argumentów i rezerwuje blok trzech zmiennych typu int, ustawiając ich wartości kolejno na 5, -12, 33. Funkcja zwraca wskaźnik na środkową zmienną. Utwórz przypadek testowy w funkcji main, który wyświetla wartości z bloku stworzonego przez funkcję.

  4. Napisz funkcję initFloats, która nie przyjmuje argumentów i rezerwuje blok trzech zmiennych typu float, ustawiając ich wartości kolejno na 4.5, 2.3, -4.2. Funkcja zwraca wskaźnik na początkową ze zmiennych w bloku. Utwórz przypadek testowy w funkcji main, który wyświetla wartości z bloku stworzonego przez funkcję.

  5. Napisz funkcję initFlts, która nie przyjmuje argumentów i rezerwuje blok czterech zmiennych typu float, ustawiając ich wartości kolejno na 0.5, 1.5, 2.5, i 3.5. Funkcja zwraca wskaźnik na ostatnią zmienną w bloku. Utwórz przypadek testowy w main, aby wyświetlić wartości z bloku stworzonego przez funkcję.

  6. Napisz funkcję sumToPtr z trzema argumentami: dwoma wskaźnikami na stałe typu int i wskaźnikiem na zmienną typu int. Funkcja ma przepisać do zmiennej wskazywanej przez trzeci argument sumę wartości stałych wskazywanych przez pierwszy i drugi argument. Utwórz przypadek testowy.

  7. Napisz funkcję sqrCopy z dwoma argumentami: wskaźnikiem na stałą typu int i wskaźnikiem na zmienną typu int. Funkcja ma przepisać kwadrat wartości stałej do zmiennej wskazywanej przez drugi argument. Utwórz przypadek testowy.

  8. Napisz funkcję subPtrs z dwoma argumentami: wskaźnikiem num1 na stałą wartość typu double i stałym wskaźnikiem num2 na zmienną typu double. Funkcja ma zwracać różnicę wartości, na które wskazują num1 i num2. Utwórz przypadek testowy.

  9. Napisz funkcję sumSqrs z dwoma argumentami: wskaźnikiem num1 na stałą wartość typu int i stałym wskaźnikiem num2 na zmienną typu int. Funkcja ma zwracać sumę kwadratów wartości wskazywanych przez num1 i num2. Utwórz przypadek testowy.

  10. Napisz funkcję linFuncVal z trzema argumentami: wskaźnikiem a na stałą wartość typu float, stałym wskaźnikiem b na zmienną typu float, i wskaźnikiem x na stałą wartość typu float. Funkcja ma obliczać i zwracać wartość funkcji liniowej y=ax+b dla argumentu x, gdzie a i b są wskazywane przez odpowiednie wskaźniki. Utwórz przypadek testowy.

  11. Napisz funkcję minPtr z trzema argumentami, które są wskaźnikami na zmienne typu int. Funkcja zwraca wskaźnik na zmienną o najmniejszej wartości spośród tych, na które wskazują argumenty. Utwórz przypadek testowy w main, aby wyświetlić najmniejszą wartość spośród trzech zmiennych.

  12. Napisz funkcję multPtrs z dwoma argumentami: wskaźnikiem num1 na stałą wartość typu double i stałym wskaźnikiem num2 na zmienną typu double. Funkcja zwraca iloczyn wartości wskazywanych przez te wskaźniki. Utwórz przypadek testowy.

  13. Napisz funkcję absVal z jednym argumentem, którym jest wskaźnik na zmienną typu int. Funkcja oblicza wartość bezwzględną zmiennej wskazywanej przez wskaźnik i aktualizuje tę zmienną. Utwórz przypadek testowy w main, aby wyświetlić wartość zaktualizowanej zmiennej.

  14. Napisz funkcję swap z dwoma argumentami: wskaźnikiem ptr1 na zmienną typu int i wskaźnikiem ptr2 na inną zmienną tego samego typu. Funkcja zamienia miejscami wartości wskazywane przez wskaźniki. Utwórz przypadek testowy.

  15. Napisz funkcję swapSign z dwoma argumentami: wskaźnikiem ptr1 na zmienną typu double i wskaźnikiem ptr2 na inną zmienną tego samego typu. Funkcja zamienia miejscami wartości wskazywane przez wskaźniki, jeśli mają one różne znaki. W przeciwnym razie nie robi nic. Utwórz przypadek testowy.