» »

[C] osnovno vprašanje

[C] osnovno vprašanje

slovencl ::

Probu sem dva programčka: primer1 - ta mi je jasn, primer2 - ta mi pa ni čist jasn, zakaj se prevjalnik nič ne pritoži, saj ima v drugi for znki dve spremenjlivke istega imena?
  • zavaroval slike: Vesoljc ()

MaCoFaCo ::

ql000 ::

nima veze! Ti v drugi zanki samo ponovno prirediš i-ju neko drugo vrednost.

P.S.
[C++] in ne [C]

Zgodovina sprememb…

  • spremenil: ql000 ()

MaCoFaCo ::

Kolikor jaz razumem, notranji "i" nima veze z zunanjim. Oba sta na različnih naslovih. I think :D .

Edit: Res je. Če daš v obeh zankah izpis:
cout << &i << "\n"; 

se vidi da sta naslova različna (malo sem izven C/C++ forme).

Zgodovina sprememb…

  • spremenilo: MaCoFaCo ()

slovencl ::

ql000, če bi bilo tako, potem bi imel i na koncu druge zanke vrednost čez 50 (saj ni nobeneg ukaza, ki bi i-ju nazaj priredil vrednost, ki jo je imel pred drugo for zanko), in se nebi še enkrat zvrtel v prvi zanki.

Zgodovina sprememb…

  • spremenil: slovencl ()

NEO_ ::

MaCoFaCo ti je pravilno razlozil zakaj tako delovanje.

Ta i v drugi zanki nima nic skupnega z i-jem iz prve zanke (razen ime). Finta je v tem, da se ta i deklarira kot "lokalna" spremenljivka in se po koncu delovanja prve for zanke tudi "izbrise" iz pomnilnika.

Probaj uprabiti operato naslova (&i) in bos videl da imata spremenljivki razlicen naslov v pomnilniku.

lp
"nothing is impossible"

ql000 ::

upsy! Silly me! :8)

slovencl ::

Zakaj pa potem ne smeš narediti:
int i;
int i;
saj nimata nič skupnega, razen ime :D

Vesoljc ::

isti scope(zor) imata

tole
{
   int i;
   int i;
}

ni isto kot
{
   int i;
   {
      int i;
   }
}
Abnormal behavior of abnormal brain makes me normal...

NEO_ ::

int i;
int i;

to pa je redeklaracija spremenljivke i, ki pa po ansii c++ ni dovoljena :)
"nothing is impossible"

Matako ::

Gre za dva 'i' ja vsak v svojem obsegu (scope).

Da bi bila stvar še bolj zabavna, sta gnezdena. C++ vedno najprej upošteva najbolj lokalni scope. Zato je pa dobro dajati gnezdenim števcem vseeno različna imena, čeprav, kot kaže lepo tvoj primer, ni nujno. Ker, če boš zdaj spremenil samo tisti notranjo deklaracijo v for zanki, bo še vedno vse delalo, samo narobe.
/\/\.K.

fogl ::

Še eno vprašanje: tistiral sem en primerček:
int gPodatkiC[2][3]={{1,2,3},{4,5,6}};

void podatki(int *podatek, int n)
{
	for(int i=0; i<n; i++)
	{
		cout<<*podatek<<endl;
		podatek++;
	}
}

int main()
{
       //podatki(gPodatkiC,4);
	podatki(&gPodatkiC[0][0],4);
	return 1;
}


Zakaj gPodatkiC ni enako &gPodatkiC[0][0]. V prvem primeru se pritožuje, v drugem pa ne?
lp, klemen

OwcA ::

Ker je gPodatkiC kazalec na kazalec na int, podatki pa pričakuje kazalec na int.
Otroška radovednost - gonilo napredka.

slovencl ::

To mi pa ni najbolj jasno. Če bi imel npr. gPodatkiC in &gPodatkiC[0], bi bilo pa isto.

OwcA ::

Ja,

&gPodatkiC[0][0]

je drugače ekvivalenten

gPodatkiC[0]
Otroška radovednost - gonilo napredka.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

ugani film (strani: 1 2 3 478 79 80 81 )

Oddelek: Sedem umetnosti
4035188033 (65808) Hansb
»

CPU cooler -59 (strani: 1 2 )

Oddelek: Hlajenje in modifikacije
706319 (4261) sharp
»

Ugani kaj je na sliki

Oddelek: Loža
302654 (2086) tx-z
»

Twinmos Speed Premium PC3500 problemi

Oddelek: Navijanje
211461 (959) ethelred
»

Socket 462 (A) AMD Athlon 1800+

Oddelek: Navijanje
491877 (1381) tiborrr

Več podobnih tem