/***************************************************************************/
/* File:     vb-func2.c
/* Status:   27-sep-2000, pfk.
/* Functie:  Programma met verschillende functie-aanroepen om "call by value"
/*           en "call by reference" duidelijk te maken.
/***************************************************************************/

#include <stdio.h>

int geefEen ()
{ /* doe iets */
  return (1);
}

int veranderNietInFunctie (int geheel)
{ geheel += 1;
  return (geheel);
}

int veranderWelInFunctie (int *geheel)
{ *geheel += 1;
  return (*geheel);
}

void verwisselZonderPointers (int v1, int v2)
{ int temp;
  temp = v1;
  v1   = v2;
  v2   = temp;
}

void verwisselMetPointers (int *v1, int *v2)
{ int temp;
  temp = *v1;
  *v1  = *v2;
  *v2  = temp;
}

int main ()
/***************************************************************************/
/* Hoofdprogramma.
/***************************************************************************/
{
  int var1, var2;

  printf ("Waarde van functie geefEen is: %d\n\n", geefEen());

  var1 = 10;
  printf
   ("Waarde van variabele var1 voor veranderNietInFunctie is:   %d\n", var1);
  printf
   ("Waarde van functie veranderNietInFunctie is:               %d\n",
    veranderNietInFunctie(var1));
  printf
   ("Waarde van variabele var1  na  veranderNietInFunctie is:   %d\n\n", var1);

  var1 = 10;
  printf
   ("Waarde van variabele var1 voor veranderWelInFunctie is:    %d\n", var1);
  printf
   ("Waarde van functie veranderWelInFunctie is:                %d\n",
    veranderWelInFunctie(&var1));
  printf
   ("Waarde van variabele var1  na  veranderWelInFunctie is:    %d\n\n", var1);

  var1 = 11;
  var2 = 22;
  printf
   ("Waarde van variabele var1 voor verwisselZonderPointers is: %d\n", var1);
  printf
   ("                     var2 voor verwisselZonderPointers is: %d\n", var2);
  verwisselZonderPointers (var1, var2);
  printf
   ("Waarde van variabele var1  na  verwisselZonderPointers is: %d\n", var1);
  printf
   ("                     var2  na  verwisselZonderPointers is: %d\n\n", var2);

  var1 = 11;
  var2 = 22;
  printf
   ("Waarde van variabele var1 voor verwisselMetPointers is:    %d\n", var1);
  printf
   ("                     var2 voor verwisselMetPointers is:    %d\n", var2);
  verwisselMetPointers (&var1, &var2);
  printf
   ("Waarde van variabele var1  na  verwisselMetPointers is:    %d\n", var1);
  printf
   ("                     var2  na  verwisselMetPointers is:    %d\n", var2);

  return (0);
}
