Ver Mensaje Individual
  #4 (permalink)  
Antiguo 04/03/2015, 15:48
Madh
 
Fecha de Ingreso: octubre-2013
Mensajes: 44
Antigüedad: 11 años, 5 meses
Puntos: 5
Respuesta: manipular array desde funcion

En C/C++, cuando pasas una variable a una función lo que le pasas es una copia del contenido de esa variable. De esta forma, por mucho que modifiques esa copia, no verás el resultado en la variable original:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. void cambiar(string str){
  7.  
  8.     str[0] = 'H';
  9. }
  10.  
  11. int main(void){
  12.  
  13.     string cadena = "hola";
  14.  
  15.     cout << cadena << endl;
  16.     cambiar(cadena);
  17.     cout << cadena << endl;
  18.    
  19.     return 0;
  20. }

A esto se le llama como "paso por valor". Para poder modificar la variable original, es necesario realizar un "paso por referencia". La idea, es que en vez de pasar el contenido, se pasa la dirección de memoria de la variable, de esta forma podemos modificar la variable original y no una copia. Para ello en C se utilizan los conocidos "punteros", los cuales se expresan con el carácter "*" seguido de la variable (en C++ se puede utilizar además las "referencias" las cuales se expresan con el carácter "&" seguido de la variable).

Aquí te dejo un ejemplo utilizando referencias (ojo, solo funciona en C++):

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5.  
  6. void cambiar(string &str){  //Utilizar operador dirección/referencia
  7.  
  8.     str[0] = 'H';
  9. }
  10.  
  11. int main(void){
  12.  
  13.     string cadena = "hola";
  14.  
  15.     cout << cadena << endl;
  16.     cambiar(cadena);
  17.     cout << cadena << endl;
  18.    
  19.     return 0;
  20. }

En resumen, deberías buscar información sobre el "paso por referencia". De todas formas, no estaría de más que especificaras un poco más tu problema como ya te ha comentado el usuario de arriba.