Iz E-študij, proste zakladnice študentskega znanja
#include <stdio.h>
// rezervira prostor 30x char, buffer "konstantno" kaze na ta prostor
char buffer[] = "Razvoj programskih sistemov 1";
// kazalec ptr
char * ptr = NULL;
// dvojni kazalec dptr
char ** dptr = NULL;
char * kazalec = NULL;
int main() {
printf("%s\n", buffer);
// ********** POLJE ptr
// vsebina z indeksiranjem
buffer[1] = 'A';
printf("1: %s\n", buffer);
// *********** KAZALEC ptr
// inicializacija kazalca
ptr = (char *) & buffer;
// kazalec kot polje
ptr[2] = 'Z';
printf("2: %s, %s\n", buffer, ptr);
// vsebina od (kazalec + odmik)
*(ptr + 3) = 'V';
printf("3: %s, %s\n", buffer, ptr);
// premaknemo kazalec za 4 mesta (4x char) naprej
ptr = ptr + 5;
// vsebina kazalca (brez odmika)
*ptr = 'J';
printf("4: %s, %s\n", buffer, ptr);
// premik za 1 char naprej
ptr++;
// po izvedbi ptr kaze na crko p
ptr++;
// ********** DVOJNI KAZALEC dptr
// inicializacija dvojnega kazalca, mora kazati na nek kazalec
dptr = & ptr;
// (vsebina kazalca) je (kazalec na char) = polje
(*dptr)[0] = 'P';
printf("5: %s, %s\n", buffer, *dptr);
// povecamo vsebino (kazalec na char) kazalca = premik na naslednji znak
(*dptr)++;
// 2x dereferenca (vsebina vsebina) dptr, kar je dejanski znak v polju
(**dptr) = 'R';
printf("6: %s, %s\n", buffer, *dptr);
// premik na naslednji kazalec, ZELO NEVARNO, Segmentation fault
kazalec = (char *) & buffer;
printf("pptr = %i\n", &ptr);
printf("dptr = %i\n", &dptr);
printf("kata = %i\n", &kazalec);
dptr ++ ;
dptr ++ ;
printf("6: %s\n", *dptr);
//printf("6: %s, %s\n", buffer, *dptr);
// sedaj dptr ne kaze vec na ptr kot prej, ampak na lokacijo takoj za ptr
// (to pa je v tem programu ravno dptr) - torej kaze nase
}