Newsgroup: it.comp.lang.c++
Titolo: chi mi traduce questa istruzione?

Il problema mio (essendo uno studente di c/c++ alle prime) è che non riesco
a tradurre  questo tipo di condizione all'interno delle strutture di
controllo. Es:
Che tipo di condizione sono queste all'interno delle strutture di controllo?
if(p){ istruzioni......}
while(*str){ istruzioni........}
mi spiego meglio, le condizioni che riesco a interpretare contengono tutte
degli operatori logici o di confronto, ma quando mi trovo ad interpretare
delle condizioni come quelle nell'esempio, io non riesco proprio ad
interpretare. Spero di essere stato chiaro.
Ringrazio a chi mi rispondera. Ciao! Saluti a tutti!



Io non ho capito bene che tipo hanno le variabili p e str.
Se ad esempio da qualche parte c'e'
   int p;
allora if(p) e' equivalente a if(p != 0) (in quanto il valore
booleano false corrisponde a 0, per il compilatore).
Se str e'  ad esempio di tipo char * (cioe' da qualche parte c'e'
   char *str;
) 
allora if(*str) dovrebbe equivalere a if(str[0] != 0) 
(i char sono trattati come interi dai compilatori C).
Marco Guidi.

Quindi, concludendo, questa è una sintassi che viene usata per abbreviare
e/o semplificare il codice?
Quindi, quando all'interno di una condizione viene posto soltanto il nome
della variabile, stringa o puntatore, vuol dire:
if(p) == if(p!=0)
while(*str) == while(*str!=0)
Da come ho capito dovrebbe essere così! Mi correggi se sbaglio?
Ciao, ti ringrazio x l'attenzione.

 while(*str){ istruzioni........}
In C/C++ qualsiasi espressione ha un valore booleano, se il risultato
dell'espressione e' uguale a zero viene interpretato come falso,
altrimenti come vero.
if(p){ istruzioni......}         ===> if(p!=0){ istruzioni......}
while(*str){ istruzioni........} ===> while((*str)!=0){
istruzioni........}
Questo vale per qualsiasi tipo, infatti p in questo caso potrebbe essere
un intero, un reale o un puntatore, str invece sara' sicuramente un
puntatore, ma l'oggetto puntato potra' a sua volta essere di un tipo
qualsiasi.
Spero di essere stato chiaro, ciao.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |

interpretare. Spero di essere stato chiaro.
Ti ho capito perfettamente.
In realta' per chi e' abituato alla filosofia del linguaggio, riuscire a capire
cosa vogliano significare quelle condizioni e' istintivo, mentre, in realta',
puo' risultare difficile per chi e' alle prime armi.
In C, difatti, non esiste, a differenza ad esempio del Pascal, il tipo di dato
"booleano".
La convenzione pero' e' alquanto semplice :
TRUE  = qualsiasi valore diverso da 0
FALSE = 0
Questa convenzione viene poi applicata in vari contesti.
Ad esempio, per le stringhe.
Le stringhe, in C, si caratterizzano per il formato "ASCIIZ", cioe' una sequenza
di caratteri seguiti dal valore ASCII 0.
char *a[5] = "abcd";
viene rappresentata in memoria come
| a[0]   | a[1]   | a[2]   | a[3]  | a[4]  | 
--------------------------------------------
|  'a'   |  'b'   |  'c'   |  'd'  |  0    |
Attenzione : a[4] = '\0' e NON a[4] = '0'
Data questa condizione si puo' interpretare
if (*str) { ...  }
in questo modo
TRUE  = (*str != '\0')
FALSE = (*str == '\0')
quindi 
if (*str) { ... } equivale a if (*str != '\0') { ...  }
e 
if (!*str) { ... } come if (*str == '\0') { ... }
Allo stesso modo per un valore p intero del tipo
int p;
vale la regola
TRUE  = (p != 0)
FALSE = (p == 0)
si puo' pertanto interpretare 
if (p) { ... } come if (p != 0) { ... }
e
if (!p) { ... } come if (p == 0) { ... }
Spero di essermi spiegato bene. :)
Skyscraper
----------------------------------------------------------------
"Sopra il camper la capra campa, sotto il camper la capra crepa"
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

 "booleano".
In C++ esiste, si chiama  bool  e puo' assumere i valori
false  e  true  (minuscoli). 
bool, false e true sono keyword del C++.
Interi, puntatori e floating-point possono essere convertiti
implicitamente in bool. Zero diventa false, qualsiasi valore
diverso da zero diventa true.
Purtroppo un bool puo' essere convertito automaticamente in
un int, false diventa 0, true diventa 1.
	Mauro