Waarom het "int* var" is en niet "int *var"
int* var
is een variabele genaamd var, en die variabele is een pointer naar een integer.
int *var
is een pointer naar een variabele var, die een integer is. Maar wacht! Je kan niet "pointen" naar een variabele. Alleen naar een addres. Een "pointer" naar een variabele zou een reference zijn, en alleen C++ heeft die (met &
, in plaats van *
). Zo moet je het dus niet zien. En ook niet noteren.
int*
is een pointer naar een int
. Toevallig moet je deze kunnen aanroepen in je high-level language, dus je hangt er een label aan: in ons eerdere geval is dat "var". ZO kun je de pointer naar de int hergebruiken. Maar iets als int *var
bestaat dus semantisch niet.
En stel je hebt een functie. Die verwacht als argument een pointer naar een char
.
void func(char* arg){}
Verwacht hij als argument een pointer naar arg? Nee. Hij verwacht een pointer naar EEN char. De naam/het label "arg" is eigenlijk irrelevant en toevallig, maar we moeten een label hebben om later arg te kunnen (her)gebruiken in de functie. Dat is de enige reden. Dus waarom zou je ooit zeggen dat hij een pointer naar arg verwacht? En waarom zou je dus ooit char *arg
typen?
Dit was 'm voor deze keer, voor de volgende keer gaan we het erover hebben waarom je je malloc
s en realloc
s niet zou moeten casten!