2011-01-28 10 views
5

in questo codice:Cambiare il contenuto di un puntatore variabile

#include <iostream> 
int main() 
{ 
const char* name = "Abc"; 
std::cout<<*name<<std::endl; 
return 0; 
} 

Come posso cambiare il contenuto della variabile puntatore, non a cosa sta puntando?

E, perché sto ottenendo A come output da questo programma?

Grazie.

risposta

11

Ottiene un char perché si de-fa riferimento a un puntatore char*.

è possibile modificare il contenuto facendo:

*a = 'B'; // your char* would contain "Bbc" 
a[0] = 'B'; // your char* would contain "Bbc" 
a[1] = 'B'; // your char* would contain "ABc" 
a[2] = 'B'; // your char* would contain "AbB" 

Ma, cambiando il contenuto di una stringa letterale ha un comportamento non definito in C. Quindi non dovresti farlo. Invece, è necessario popolare il tuo char* in modo dinamico. Con qualcosa di simile:

char *a; 
a = malloc(sizeof(char)*100); // a string with a maximum of 99 chars 
strcpy(a, "Abc"); 
// now you can safely change char* contents: 
a[0] = '1'; 
a[1] = '1'; 
a[2] = '1'; 
printf("%s", a); // will print 111 

manipolazione String non è così facile in linguaggi come C . Dato che con la sintassi che stai usando, sembra che tu stia compilando il tuo codice con un compilatore C++, allora potresti dare una prova di classe string invece di usare i puntatori a char per gestire le tue stringhe.

1

si accede *Name che si riferisce alla prima locazione di memoria che ha una io voglio fyou B stampa *(Name+1) ed ecc ..

Se si desidera modificare il contenuto quindi assegnare il valore a * Nome o * (Nome + 1) o dove vuoi.

+0

Attenzione: la modifica dei valori letterali delle stringhe è un comportamento indefinito - sono costanti per una buona ragione – Flexo

4

Non provare a modificare il contenuto di una variabile const char *. Per definizione è costante. Se si desidera una stringa mutabile, utilizzare std :: string o allocare un char * buffer [].

1

per modificare il valore di indirizzo di name è possibile modificare l'indirizzo di un altro stringa letterale:

const char* newname = "def"; 
name = newname; 

tale che nome è ancora un puntatore a const char.

0

È necessario comprendere const per quanto riguarda i puntatori.

const char * indica un puntatore ai dati che non è possibile modificare, ma è possibile spostare il puntatore.

const char * name = "Abc"; 
name = "Def"; // allowed 
name[1]='B'; // compiler error 

Se si desidera un puntatore non è possibile spostare quindi utilizzare

const char * const name = "Abc"; // cannot move to point at something else 
char data[] = "ghi"; 
char * const name = &data[0]; 
name[1] = 'H'; // permitted 
name = &data[1]; // not allowed as name is a constant pointer 

L'output è A causa * nome è un carattere, quello il vostro punti puntatore, così il primo nella stringa.

Problemi correlati