Newsgroup: it.comp.lang.c
Titolo: passare un elemento di *settimana[7] a una funzione?

Qualche giorno fa ho messo un post che domandava come mettere in
un array i giorni della settimana. Ok risolto e capito.
MA ho confusione totale di come poter stampare un elemento,
passando ad una funzione (solo per esercizio).
Sotto un esempio, che non passa dal compilatore...
Qualcuno può dirmi che granchio prendo?
#include <stdio.h>
void stampa (int pr);
int main()
{
char *settimana[7]={"lunedi",
"martedi","mercoledi","giovedi","venerdi","sabato","domenica"};
//ma l'idirizzo in memoria dove sta l'array settimana, e il suo
primo elemento,  sarà sotto forma di 2818128..., quindi è un
numero intero. no?
perchè non posso passare settimana, un indirizzo in memoria, cioè
un puntatore, come intero alla funzione "stampa"?
stampa (settimana); 
}
void stampa ( int pt)
{
printf ("%s\n", *pt); // qui secondo me, mi doveva far
visualizzare lunedi.
}
-- 
Inviato da Virgilio 
http://newsgroup.virgilio.it
..un servizio di news via web con in piu' l'antispam

 }
Scusa, bastava:
void stampa(char *pt[])
{
   printf("%s\n", pt[0]);
}
Piu' chiaro, pulito... e soprattutto corretto. Perche' ti stai a 
complicare la vita pensando alla rappresentazione che hanno i tipi in 
memoria?
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://mbellett.web.cs.unibo.it/
Jabber: RedGlow  - Linux registered user 299762 @ machine 213003

 machine 213003


 memoria?
La logica dei passaggi mi è lontana però...
non capisco cosa è il contenuto di quel *pt[] passato alla
funzione.  Sono 7 contenuti di puntatori messi in un array, ok?
quindi pt è l'indirizzo in memoria (anzi sono 7)?
ad esempio 2030233 è questo primo indirizzo, supponiamo... ok, ma
allora se dico pt[0] non dico di stamparmi quell'indirizzo?
Ah no..forse no, per quello che ho imparato prima, che una
generica print("%s",nomearray) mi stampa il contenuto di un array
e non il suo indirizzo. Giusto?
Spero di non esserci attorcigliato troppo nel mio ragionamento.


 Spero di non esserci attorcigliato troppo nel mio ragionamento.
Non sono riuscito a seguirlo molto il tuo ragionamento, quindi parto da 
zero :P.
Inanzitutto, "pt" e' un array. Ok - di cosa? di puntatori a char. Quindi 
e' un array di sette elementi, ognuno di essi e' un puntatore. Bene. 
Ogni elemento dell'array cosa contiene allora? un indirizzo (essendo 
puntatori). A cosa? beh, dipende dall'argomento attuale con cui viene 
risolto: con "settimana". Allora avremo, per quanto riguarda 
"settimana", che:
settimana: una "tabella" di sette puntatori.
settimana[0]: un puntatore a char
settimana[1]: un puntatore a char
...
settimana[6]: un puntatore a char
A cosa puntano questi puntatori? Facile:
settimana[0]: un puntatore alla stringa "lunedi"
settimana[1]: un puntatore alla stringa "martedi"
...
settimana[6]: un puntatore alla stringa "domenica"
Dove poi stiano queste stringhe effettivamente, fregatene: ti basti 
sapere che non le puoi modificare.
Nella funzione, sostituisci questo discorso su "settimana" con "pt", e 
ottieni lo stesso risultato.
Ovviamente, per stampare stringhe (non array, stringhe: e' una richiesta 
piu' stringente, sia come tipo, che come contenuto) tu devi passare alla 
printf _l'indirizzo della stringa da stampare_. E qui si chiude il 
cerchio. pt[0] sara' un puntatore alla stringa "lunedi", e quindi la 
printf, diligentemente, stampera' "lunedi".



Grazie MAttia.
Mi sento duro...come le "pine verdi" (così si dice a Lucca), ma
credo di avere un pò di chiarezza in piu. Comunque questo
passaggio alla funzione di un puntatore ad una stringa, o ad un
array di stringhe...non è per nulla semplice da principinte.
