[C con Clase] Caracteres..? (2)

Steven R. Davidson vze266ft en verizon.net
Jue Nov 23 09:06:49 CET 2006


Hola Yudenis,

Yudenis Martínez Abreu wrote:

> Hola de nuevo.
> 
> Ya encontré la respuesta a la primera de las preguntas que hice ahorita, 
> haciendo:
> 
> 1-Declaro un arreglo   
> 
> char numero[10]="hola";
> 
>  
> 
>  Haciendo
> 
>    if (numero[6]= =0x00)  // dentro hay un espacio
>        cout<<"verdadero";
>       else
> 
>        cout<<"false";
> 
> o
> 
>  
> 
>  Haciendo
> 
>    if (numero[6]= =0)  // dentro hay un espacio
>        cout<<"verdadero";
>       else
> 
>        cout<<"false";
> 
> Funciona sin problemas o al menos eso me parece...
> 

Exacto. Esto es lo que he explicado en mi respuesta a tu primer mensaje.

> Tengo otra duda: existe alguna forma de pasarle un parámetro desde una 
> funcion1  a una funcion2 de forma tal que al este ser modificado en la 
> funcion2 salga a funcion1 modificado? tener en cuenta que el parámetro 
> no está declarado de forma global ni la funcion2 devuelve ese nuevo 
> valor. Según entiendo en pascal se puede hacer algo parecido en 
> dependencia de como se declare la variable que recibe los datos en 
> funcion2, hago la aclaración para que se me entienda mejor.
> 

Sí; te entiendo. En Pascal, tienes que definir el parámetro como 'var' 
para pasar por referencia. En C++, esto se hace casi de la misma manera, 
indicando el declarador &. Por ejemplo,

void func2( int &ref )
{
   ref++;
}

Si hacemos,

int num = 10;
func2( num );
cout << num;

En la pantalla, aparecería lo siguiente:
11

Esto es porque 'num' ha sido pasado por referencia a 'func2()'. Esto 
implica que 'ref' es otro nombre para la variable 'num' y por tanto 
'ref' se "refiere" a la misma variable, 'num'. Por lo tanto, como 'ref' 
es modificado, también lo es 'num' ya que son la misma variable.

Ahora bien, si lo que intentas pasar como parámetro es un puntero o 
array, entonces no es necesario usar referencias, ya que la información 
apuntada es la misma. Por ejemplo,

void func1( int lista[] )
{
   for( int i=0; i<5; i++ ) lista[i]++;
}

Si tenemos,

int serie[5] = { 10, 20, 30, 40, 50 };
...
func1( serie );

cout << serie[0];
for( int i=1; i<5; i++ )  cout << ' ' << serie[i];

Aparecerá en pantalla,
11 21 31 41 51

Esto es porque al pasar el array 'serie', realmente pasamos la dirección 
de memoria que contiene el primer elemento de la lista. Por lo tanto, 
estamos copiando direcciones de memoria a la misma información. Por 
ello, usar punteros es otra manera de implementar el "paso por referencia".


Espero que haya aclarado la duda.

Steven








Más información sobre la lista de distribución Cconclase