View Full Version : Problemi con Output di un programma in C
::tony design
14-09-2003, 09: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:
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, 10: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, 10: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:
#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 {}...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.