Pitanje o pointerima
Select messages from
# through # FAQ
[/[Print]\]

Forum@DeGiorgi -> Programiranje 1 i 2

#1: Pitanje o pointerima Autor/ica: napolitanka PostPostano: 11:10 ned, 1. 2. 2015
    —
Zadatak iz skripte:

Citat:
Zadatak 10.2.3. Napišite funkciju koja preko variajbilnog parametra poništava pokazivač na cijeli broj, tj. postavlja ga na vrijednost NULL.


Kao rješenje je dana funkcija

Kod:
void nullify(int **x)
{
   *x=NULL;
}


Ali kada ju implementiram u ovaj code:
Kod:
#include<stdio.h>

void nullify(int **x)
{
   *x=NULL;
}

int main(void)
{
    int x=1,*p,**n;
    p=&x;
    n=&p;
    printf("%d, %d, %d\n",p,*n,**n);
    nullify(*n);
    printf("%d, %d, %d",p,*n,**n);
    return 0;
}



Ono što ja mislim da bi ovaj program trebao raditi je da mi ispiše sljedeće:

Kod:
adresu od x, adresu od x, vrijednost od x
adresu od x, 0, vrijednost na adresi 0


ali zapravo mi ispiše:
Kod:
adresu od x, adresu od x, vrijednost od x
adresu od x, adresu od x, 0

#2:  Autor/ica: VishykcLokacija: Zagreb PostPostano: 14:07 ned, 1. 2. 2015
    —
Stavljas kao argument u nullify *n kaje zapravo vrijednost od pointera p. To je adresa od x. Onda pogledaj kako je definirana funkcija nullify. To se dereferencira, dakle dobije se sadrzaj od x i to postavi na NULL. Valjda to onda on shvati kao 0, tj. pretvori u int. Nadam se da je dobro, nek neko ispravi ak ne valja. Very Happy

#3:  Autor/ica: vsegoLokacija: /sbin/init PostPostano: 14:14 ned, 1. 2. 2015
    —
Jednako kako f(x) ne moze promijeniti x, tako niti f(*x) ne moze promijeniti *x (ali moze promijeniti x). Upravo zbog toga i imamo "gimnastiku" s dvije zvjezdice u deklaraciji funkcije.

Usput, "adresa nula" je "ilegalna", tj. na njoj nema nista. Zato dereferenciranje NULL-a srusi program, zato ga koristimo kao oznaku za "ova adresa ne sadrzi podatak" (npr. u vezanim listama, pod kraj semestra), i zato ti program sigurno ne bi ispisao "vrijednost na adresi 0".



Forum@DeGiorgi -> Programiranje 1 i 2


output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.

Stranica 1 / 1.

Powered by phpBB © 2001,2002 phpBB Group
Theme created by Vjacheslav Trushkin