PDA

View Full Version : Problemi con Output di un programma in C


::tony design
14-09-2003, 10:54
Devo iniziare il 2° anno di informatica:
questo è l'esercizio di C:

----------------------
Qual è l'output del seguente frammento di codice ?

#include <stdio.h>

int main()
{
int V[] = {1,3,5,7,9};
int *p;

printf("%d\n", V[1]);
printf("%d\n", *(V+2));
p = V+1;
printf("%d\n", *p);
printf("%d\n", *(p+2));
p = &V[1];
printf("%d\n", *p);
printf("%d\n", *p+1);
getch();
}

L'output ho visto che è:

3
5
3
7
3
4

qualcuno mi spiega passaggio per passaggio perchè ??
per esempio cosa significa *(V+2) ????

Garzie a tutti
::tony:muro:

cionci
14-09-2003, 11:18
Non chiamarlo problemi di output xchè sono problemi di comprensione del linguaggio ;)

V è un vettore di 5 elementi...
p è un puntatore ad intero...

Nella prima printf stampa V[1] cioè 3...
Nella seconda stampa *(V+2) cioè il contenuto (*) dell'indirizzo puntato da V+2... V equivale all'indirizzo di V[0]...quindi V+2 equivale all'indirizzo di V[2]...
p = V + 1 assegna a p l'indirizzo di V[1] (V+1 equivale a &V[1])...
La terza printf stampa il contenuto (*) dell'indirizzo puntato da p, cioè V[1]...
La quarta stampa il contenuto (*) dell'indirizzo puntato da p+2, cioè V[3]...

p = &V[1] assegna a p l'indirizzo (&) di V[1]...
La quinta printf stampa il contenuto (*) di p...cioè V[1]...
La sesta stampa il contenuto (*) di p (cioè V[1]) e ci aggiunge 1...cioè stampa 4...

::tony design
14-09-2003, 11:41
Originariamente inviato da cionci
Non chiamarlo problemi di output xchè sono problemi di comprensione del linguaggio ;)

V è un vettore di 5 elementi...
p è un puntatore ad intero...

Nella prima printf stampa V[1] cioè 3...
Nella seconda stampa *(V+2) cioè il contenuto (*) dell'indirizzo puntato da V+2... V equivale all'indirizzo di V[0]...quindi V+2 equivale all'indirizzo di V[2]...
p = V + 1 assegna a p l'indirizzo di V[1] (V+1 equivale a &V[1])...
La terza printf stampa il contenuto (*) dell'indirizzo puntato da p, cioè V[1]...
La quarta stampa il contenuto (*) dell'indirizzo puntato da p+2, cioè V[3]...

p = &V[1] assegna a p l'indirizzo (&) di V[1]...
La quinta printf stampa il contenuto (*) di p...cioè V[1]...
La sesta stampa il contenuto (*) di p (cioè V[1]) e ci aggiunge 1...cioè stampa 4...

Ti ringrazio

ciao ciao
::tony

::tony design
14-09-2003, 11:58
Ho un'altro problema:

Devo riscrivere questo frammento di codice con due cicli annidati while:

#include <stdio.h>

int main()
{
int i1,i2;
for(i1=2; i1 < 10; i1 += 2)
{
for(i2 = 12; i2 > i1; --i2)
printf("X");
printf("\n");
}
getch();
}

Io ho provato in questo modo, ma l'output è diverso: :muro:

#include <stdio.h>

int main()
{
int i1,i2;
i1 = 2;
while(i1 < 10)
{
i2 = 12;
while(i2 > i1)
{
printf("X");
printf("\n");
--i2;
}
i1 += 2;
}
getch();
}

Grazie ancora...

::tony :mc:

cionci
14-09-2003, 12:04
#include <stdio.h>

int main()
{
int i1,i2;
i1 = 2;
while(i1 < 10)
{
i2 = 12;
while(i2 > i1)
{
printf("X");
--i2;
}
printf("\n");
i1 += 2;
}
getch();
}
Come vedi printf("\n") è al di fuori del ciclo + interno... Il for accetta un solo statement oppure un blocco di parentesi {}...

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.