Newsgroup: it.comp.lang.c
Titolo: Domande da principiante

Ringrazio fin da adesso quanti risponderanno.
1) char *p,q; p="pippo";q="poi"
con queste espressioni viene allocata automaticamente la memoria
necessaria?
se poi scrivo p=q, la memoria contenente pippo viene automaticamente
liberata o no? e se scrivo p="quando"?
2)
#include <stdlib.h>
main(){
double h;
h=atof("12");
h++;
}
Ottengo a schermo:
scanf: floating point formats not linked
Abnormal program termination
l'equivalente con gli interi che impiega  atoi o atol funziona
perfettamente.
3) la dimensione di un avariabile puntatore dipende dalla memoria
disponibile al compilatore? Io credo di sì perché ho visto che
cambiando il model del compilatore (TurboC 2.0 o giù di lì della
Borland ) da "small" a "large" la dimensione passa da 2 a 4 byte.
Nell'esecutivo ci sono differenze tra i due programmi? Ovvero quello
con i puntatori più grandi può poi effettivamente gestire più memoria,
se per la memoria bastano 2 byte quello con 4 è meno efficiente?
4) in relazione al punto precedente come mai con "small"
printf("%d",(p+1)-1)		--->  1
e con "large"
printf("%d",(p+1)-1)		--->  0  ?
5) Non mi sono riuscito a spiegare il comportamento della printf nel
seguente programma per valutare la precisione EPS.
#include <stdio.h>
long double t;
int m;
main()
{
t=1.0; m=1;
while((1+t/2)!=1){
  t=t/2;
  m++;
}
printf("%e\t%d\n",t,m);
}
Viene stampato -0.00000e+00    16320
A parte che non capisco da dove esce fuori il "-",
ma è anceh spuntato un 16320 che viene stampato al posto del valore
corretto di m 64.
Se aggiungo
int p=1;
printf("%e\t%d\t%d\n",t,m,p);
viene stampato -0.00000e+00    16320   64
in pratica questo 16320 si inserisce nella lista facendo slittare
tutti gli altri argomenti di un posto, e l'ultimo non viene stampato.
   Ciao,
      Giovanni. 
Giovanni Neglia
gne...@ZZZtiscalinet.it
per rispondere rimuovere ZZZ dall'indirizzo

 per rispondere rimuovere ZZZ dall'indirizzo
ti rispondo solo sulle news come da netiquette!

 seguente programma per valutare la precisione EPS.
Probabilmente problemi di precisione della rappresentazione a virgola
mobile.
EMG

 tutti gli altri argomenti di un posto, e l'ultimo non viene stampato.
č perchč un float viene messo in 32 bit, mentre un double in 64, quindi
printf("%lf\t%d\n",t,m);   // al posto di lf, puoi usare le e lg
ciao

Borland ) da "small" a "large" la dimensione passa da 2 a 4 byte.
No. Dipende dalle dimensioni dei registri macchina.
La dimensione di un puntatore e' generalmente uguale a quella di una
variabile intera, che e' dipendente dall'implementazione.

formato per il double e' %el  e non %e
Sia per i float che per i double, printf utilizza %f.
Per i "long double" si usa %lf.

formato per il double e' %el  e non %e
se dichiaro eps double con %el va beneo,
ma con long double no. Qual è il formato di stampa per long double?


Per i "long double" si usa %lf.
Con la variabile dichiarata double e %f o %e funziona,
ma con long double e %lf non ne vuole sapere.


EMG


printf("%lf\t%d\n",t,m);   // al posto di lf, puoi usare le e lg
con i long double non funziona.


variabile intera, che e' dipendente dall'implementazione.
Eppure sizeof() indica quel cambiamento


 ma con long double no. Qual è il formato di stampa per long double?
Dovrebbe essere %Lf ma non mi sembra sia standard.
EMG

 Facevo un po' di aritmetica dei puntatori.
Perň non si capisce cosa volevi ottenere. Fai un piccolo esempio
compilabile.
EMG

 gestione delle memoria?
Se vuoi approfondire l'argomento per tua cultura personale, ok. Ma sappi
che per la gestione della memoria dinamica in C non c'è alcun bisogno di
sapere cosa sia un segmento (tra l'altro un concetto ormai obsoleto).
EMG

 
Preso da un msg di qualche tempo fa di EMG:
%c A single unsigned character
%d A signed decimal integer
%i  A signed decimal integer
%e A floating point variable (exponent)
%E A floating point variable (exponent)
%f  A floating point variable
%F A floating point variable
%g Allows system to choose either
%e or
%f
%G Allows system to choose either
%E or
%F
%hd A signed short integer
%hi  A signed short integer
%ho An unsigned short integer (octal)
%hn  A short argument
%hu  An unsigned short integer
%hx  An unsigned short integer (hexadecimal lower case)
%hX An unsigned short integer (hexadecimal upper case)
%ld  A signed long integer
%le  A double precision variable (exponent)
%lf   A double precision variable
%lg   Allows system to choose either
%le or
%lf
%li  A signed long integer
%ln  A long argument
%lo An unsigned long integer (octal)
%lu An unsigned long integer
%lx An unsigned long integer (hexadecimal lower case)
%lX An unsigned long integer (hexadecimal lower case)
%lE A double precision variable (exponent)
%Le A long double precision variable (exponent)
%LE A long double precision variable (exponent)
%lF A double precision variable
%Lf A long double precision variable
%LF A long double precision variable
%Lg Allows system to choose either
%Le or
%Lf
%lG Allows system to choose either
%lE or
%lF
%LG Allows system to choose either
%LE or
%LF
%n The number of characters written so far by printf
%p A generic pointer (and its address)
%o An unsigned integer (octal)
%s A pointer to a character string
%u An unsigned decimal integer
%x An unsigned hexadecimal (lower case)
%X An unsigned hexadecimal (upper case)
%% The % sign
#e Decimal point appears even when not needed.
#f Decimal point appears even when not needed.
#g Decimal point appears even when not needed.
#x Hexadecimal with ox prefix.
L'avevo trovato interessante e cosi' e' finito tra i "Saved Msg"
--
 Ciao, Bianco.
 Reply to 
luca....@tiscalinet.it

%LF
Tutti OK eccetto LF.


EMG


 Ma in entrambi i casi non dovrebbe dipendere dal modello di memoria.
No, non ne dipende.
EMG

No, non ne dipende.
Eppure mi cambia come ho indicato sopra.


 Eppure mi cambia come ho indicato sopra.
Forse dipende da un problema del compilatore?
EMG