PDA

View Full Version : [C/C++] char * e stringhe


Broadband
15-12-2007, 12:22
Ragazzi ho qualche problemino con la manipolazione delle stringhe.
Supponiamo di avere una classe player con un attibuto name (char name[32]) con un metodo SetName.
Nell' interfaccia perchè il metodo è definito così (in Public)?

void SetName(char* newname)

Cioè io penso (da ignorante) che al metodo SetName vada passata una stringa... perchè invece gli viene passato un puntatore a un elemento di tipo char?

Grazie ragazzi non riesco a capirlo!

Broadband
15-12-2007, 12:27
Credo che la domanda sia equivalente a:

Mi potete spiegare questa istruzione
char *line = "short line for testing"?

Grazie :D

ndakota
15-12-2007, 12:28
bè un puntatore a char può essere usato per allocare una stringa.. infatti il senso è quello.. spero di non aver detto qualche cavoltata.. cioè è come pensi tu si passa una stringa solo che tramite puntatore a char..

Broadband
15-12-2007, 12:51
Grazie per l' interesse....

Però poi il metodo viene utilizzato in questo modo:

player.SetName("Hero");

Cioè poi in effetti gli passo una stringa non un puntatore a char.... cioè come se per il c++ stringhe, array di char e char* fossero la stesa cosa.

Magari qualcno più esperto può farmi un po' luce.
Grazias

Morfeo XP
16-12-2007, 18:38
Array di char e puntatori a char sono due cose differenti.

L'Array, come già sai, è una sequenza di elementi. In questo caso char.

Il puntatore invece contiene l'indirizzo di un elemento.

char *line = "short line for testing";

Con questa istruzione definisci il puntatore a char line, il quale viene inizzializzato con l'indirizzo del primo byte dell'array di char contenente la stringa "short line for testing".

In c, non puoi passare come parametro ad una funzione un array, ma solo il suo indirizzo.
Quindi quando chiami il metodo

player.SetName("Hero");

viene passato l'indirizzo dell'array di char (stringa) "Hero", e non la stringa stessa.

Spero di esser stato abbastanza chiaro....

Broadband
17-12-2007, 18:43
Ti ringrazio caro!

Credo di aver capito