Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Pitanje o pointerima
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
napolitanka
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 10. 2014. (07:50:24)
Postovi: (A)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 11:10 ned, 1. 2. 2015    Naslov: Pitanje o pointerima Citirajte i odgovorite

Zadatak iz skripte:

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

Kao rješenje je dana funkcija

[code:1]void nullify(int **x)
{
*x=NULL;
}[/code:1]

Ali kada ju implementiram u ovaj code:
[code:1]#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;
}
[/code:1]


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

[code:1]adresu od x, adresu od x, vrijednost od x
adresu od x, 0, vrijednost na adresi 0[/code:1]

ali zapravo mi ispiše:
[code:1]adresu od x, adresu od x, vrijednost od x
adresu od x, adresu od x, 0[/code:1]
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


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Vishykc
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 23. 10. 2010. (14:38:08)
Postovi: (6A)16
Spol: muško
Sarma = la pohva - posuda
= 17 - 12
Lokacija: Zagreb

PostPostano: 14:07 ned, 1. 2. 2015    Naslov: Citirajte i odgovorite

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. :D
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



_________________
U matematici se sve smije, osim pogriješiti!
[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 14:14 ned, 1. 2. 2015    Naslov: Citirajte i odgovorite

Jednako kako [tt]f(x)[/tt] ne moze promijeniti [tt]x[/tt], tako niti [tt]f(*x)[/tt] ne moze promijeniti [tt]*x[/tt] (ali moze promijeniti [tt]x[/tt]). Upravo zbog toga i imamo "gimnastiku" s dvije zvjezdice u deklaraciji funkcije.

Usput, "adresa nula" je "ilegalna", tj. na njoj nema nista. Zato dereferenciranje [tt]NULL[/tt]-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".
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".



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan