[quote="SvekY"]Što će ispisati sljedeći program?[/quote]
Mogu li pitati zašto ga jednostavno ne utipkaš, kompajliraš i izvršiš? Ako ništa drugo, brže je nego čekati Forumaše... :-)
[quote][code:1]#include <stdio.h>
int main() {
int i=11, j=9, *ip, *jp;
ip=&j, jp=&i;
*jp=- *ip + *ip * *jp, --(*ip);
printf("%d %d %d %d", i, j, *ip, *jp);
return c[/quote]
0 , valjda.
[quote];
}[/code:1]
Mislim da ispisuje [code:1]90 8 8 90[/code:1][/quote]
Da.
[quote]Zbunjuje me ovaj minus iza operatora pridruživanja.[/quote]
Zašto? a=-b pridružuje varijabli a suprotnu vrijednost od varijable b . Najobičniji unarni minus.
[quote]Treba li zarez operator izgledati ovako:
([i]prva_naredba[/i], [i]druga_naredba[/i], ... ,[i]zadnja_naredba[/i]);[/quote]
Otprilike.
[quote]ili mogu izostaviti zagrade.[/quote]
Kao i kod ostalih operatora, stvar je u prioritetu. Ako od 2+3 želiš oduzeti 8, možeš izostaviti zagrade, ali ako to želiš pomnožiti s 5 , ne možeš. Jasno?
Druga je stvar što zarez ima strogo najniži prioritet od svih operatora u Cu, pa ispada da su zagrade uvijek potrebne kad u expressionu ima još neki operator koji bismo htjeli da se izvrši kasnije.
To između ostalog znači da a=2,3 pridruži dvojku varijabli a , ali sam taj izraz vraća 3 (zarez se izvršava kasnije, i vrati drugi operand). Npr. nakon b=(a=2,3) , a ima vrijednost 2 , a b ima vrijednost 3 .
[quote] Da li uopće postoji za više od jedne[/quote]
Operator kao i svaki drugi. Lijevo asocijativni, dakle može primati više operanada, "a,b,c" se evaluira kao "(a,b),c" (i vrati c , naravno).
[quote] naredbe?[/quote]
Ne naredbe! Ne možeš napisati npr.
(while(bla--)blju++),(if(blju)bla--) , kao što ne možeš napisati ni
(while(bla--)blju++)+(if(blju)bla--) .
Druga je stvar što u Cu mnoge stvari nisu naredbe, koje u ostalim jezicima jesu. Npr. printf (poziv funkcije), = (operator) , itd. Sve one vraćaju vrijednost.
[quote]Moramo li na kolokviju kad pišemo program pisati [i]int[/i] kada se podrazumjeva npr. kod [i]main[/i] (to jest kad mogu ne napisati ništa pa da kompilator shvati da je [i]int[/i])?[/quote]
Bilo bi dobro pisati. Jest da ANSI tako kaže, ali ima čudnih kompajlera koji to shvate kao void... mislim da je dobro učiti se deklarirati povratni tip uvijek. Sigurno ne škodi. :-)
SvekY (napisa): | Što će ispisati sljedeći program? |
Mogu li pitati zašto ga jednostavno ne utipkaš, kompajliraš i izvršiš? Ako ništa drugo, brže je nego čekati Forumaše...
Citat: | Kod: | #include <stdio.h>
int main() {
int i=11, j=9, *ip, *jp;
ip=&j, jp=&i;
*jp=- *ip + *ip * *jp, --(*ip);
printf("%d %d %d %d", i, j, *ip, *jp);
return c[/quote]
0 , valjda.
[quote];
} |
Mislim da ispisuje |
Da.
Citat: | Zbunjuje me ovaj minus iza operatora pridruživanja. |
Zašto? a=-b pridružuje varijabli a suprotnu vrijednost od varijable b . Najobičniji unarni minus.
Citat: | Treba li zarez operator izgledati ovako:
(prva_naredba, druga_naredba, ... ,zadnja_naredba); |
Otprilike.
Citat: | ili mogu izostaviti zagrade. |
Kao i kod ostalih operatora, stvar je u prioritetu. Ako od 2+3 želiš oduzeti 8, možeš izostaviti zagrade, ali ako to želiš pomnožiti s 5 , ne možeš. Jasno?
Druga je stvar što zarez ima strogo najniži prioritet od svih operatora u Cu, pa ispada da su zagrade uvijek potrebne kad u expressionu ima još neki operator koji bismo htjeli da se izvrši kasnije.
To između ostalog znači da a=2,3 pridruži dvojku varijabli a , ali sam taj izraz vraća 3 (zarez se izvršava kasnije, i vrati drugi operand). Npr. nakon b=(a=2,3) , a ima vrijednost 2 , a b ima vrijednost 3 .
Citat: | Da li uopće postoji za više od jedne |
Operator kao i svaki drugi. Lijevo asocijativni, dakle može primati više operanada, "a,b,c" se evaluira kao "(a,b),c" (i vrati c , naravno).
Ne naredbe! Ne možeš napisati npr.
(while(bla–)blju++),(if(blju)bla–) , kao što ne možeš napisati ni
(while(bla–)blju++)+(if(blju)bla–) .
Druga je stvar što u Cu mnoge stvari nisu naredbe, koje u ostalim jezicima jesu. Npr. printf (poziv funkcije), = (operator) , itd. Sve one vraćaju vrijednost.
Citat: | Moramo li na kolokviju kad pišemo program pisati int kada se podrazumjeva npr. kod main (to jest kad mogu ne napisati ništa pa da kompilator shvati da je int)? |
Bilo bi dobro pisati. Jest da ANSI tako kaže, ali ima čudnih kompajlera koji to shvate kao void... mislim da je dobro učiti se deklarirati povratni tip uvijek. Sigurno ne škodi.
|