[ vozho @ 24.05.2010. 04:26 ] @
napisao sam test program,cisto da saberem 2 i 3...
medjutim,posle kompajliranja se pokrene program i javlja se

send error report/don't send greska.

Code:
#include <stdio.h>
#include <stdlib.h>

void saberi(int *c,int a,int b)
        {
        *c=a+b;
        return;
        }
        
main()
      {
      int a=2,b=3,*c;
      saberi(*c,a,b);
      printf("%d\n",*c);
      system("pause");
      }


u greskama pise: [warning]passing arg 1 of `saberi' makes pointer from integer without a cast

pisem u dev-C++-u.
Sta bi trebalo uraditi da ovaj program normalno funkcionise?Hvala unapred. :)

(e,da,nije mi problem ako bih npr. napravio funkciju koja vraca int kao zbir dva broja,sa return a+b,ta mi radi normalno,ali ovo me muci...)

P.S. uh,ovo sam trebao u C za pocetnike...na pogresnom mestu tema,sry :\

[Ovu poruku je menjao vozho dana 24.05.2010. u 05:48 GMT+1]

[Ovu poruku je menjao vozho dana 24.05.2010. u 20:05 GMT+1]
[ X Files @ 24.05.2010. 06:33 ] @
// netestirano, probaj s ovim izmenama
Code:

// ...
saberi(&c,a,b);
// ...
printf("%d\n",c);
// ...
[ Mihajlo Cvetanović @ 24.05.2010. 09:16 ] @
S tim da u main-u promenljiva c mora da bude int, a ne int*.
[ enaB @ 24.05.2010. 15:23 ] @
A ni return u funkciji saberi nije potrebno, ako se ne varam. Kad se sve to sastavi, izgleda ovako


Code:
#include <stdio.h>
#include <stdlib.h>

void saberi(int *c,int a,int b) {
        *c=a+b;
}

main() {
      int a=2,b=3,c;
      saberi(&c,a,b);
      printf("%d\n", c);
      system("pause");
 }
[ vozho @ 24.05.2010. 19:41 ] @
odlicno,hvala svima

jos samo jedno pitanjce:ako ostavim c da bude *int,ovo radi.Da li to znaci da je zbir ustvari adresa na koju pokazuje pokazivac c?A program samo ispise tu adresu?
[ Mihajlo Cvetanović @ 24.05.2010. 21:23 ] @
Samo ti se čini da radi, to jest nekad radi, a nekad ne radi, zavisi od mesečeve mene i šta si jeo sinoć za večeru. Ako je promenljiva pointer na nešto (u ovom slučaju pointer na int) onda ona mora da pokazuje na nešto korisno da bi mogla da se koristi. Ovde ne pokazuje ni na šta posebno, to jest vrednost pointera je slučajna pri svakom izvršavanju programa. Kad pokušaš da koristiš slučajno parče memorije za čitanje i pisanje može da se desi jedno od sledećeg: sve će raditi normalno, ili će program "pući" na tom mestu, ili će program pući na nekom drugom mestu ko zna kad i kako, ili program neće pući ali će početi misteriozno da se ponaša, i trebaće ti dve nedelje da pronađeš problem. A sve samo zato što nisi inicijalizovao promenljivu, u ovom slučaju int *c = NULL. Da si to uradio onda bi program pukao svaki put pri pokušaju upisivanja, i otkrio bi grešku za 2 minuta. A greška je da ti treba int, da bi upisao nešto u njega, a ne int* koji ničemu ne služi.
[ enaB @ 24.05.2010. 21:28 ] @
Tj. može da se upiše broj i u int* jer je i adresa takođe celobrojna vrednost kao i vrednost koja se u ovom slučaju upisuje (broj 5) pa se ne pravi problem, dok mu ne napišeš negde u programu *c :)
[ Mihajlo Cvetanović @ 24.05.2010. 21:36 ] @
E vidi stvarno! Nisam ni primetio šta je fora, jer se ovo ne bi ni kompajliralo u C++.