Kazalci2.c

Iz E-študij, proste zakladnice študentskega znanja

Skoči na: navigacija, iskanje
#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
 
}
Vzpostavljeno iz »http://www.e-studij.si/Kazalci2.c«
Osebna orodja
Imenski prostori
Različice
Dejanja
navigacija

Tiskanje/izvoz
orodja