Formas de pasar un valor por referencia
Un puntero no constante a un dato no constante
#include <iostream>
void sumoeldoble(int*);// prototipo
void main ()
{
int X =15;
sumoeldoble(&X );// Pasa la dirección de memoria de X .
std::cout<< X;
}
void sumoeldoble(int*ptrX )
{
// Toma el valor de X mediante el operador de indirección
// La funcion no devuelve nada porque modifica el valor por referencia.
*ptrX =*ptrX +(*ptrX *2);
}
Un puntero no constante a un dato constante
#include <iostream>
void imprimeChars(constchar*);// prototipo
void main ()
{
char cFrase[]="Hola Mundo";
imprimeChars( cFrase );
}
void imprimeChars(constchar*ptrStr )
{
for(;*ptrStr !='\0'; ptrStr++)//Sin inicialización
std::cout<<*ptrStr;
}
Un puntero constante a un dato no constante
Un puntero es constante cuando apunta siempre a la misma dirección de memoria y si el dato no es constante entonces el valor puede ser modificado.
void main ()
{
int foo, bar;
int*const ptrFoo =&foo;// Apuntador constante a un entero en la dirección de memoria de foo
*ptrFoo =53;
// Esto devuelve un error porque es un puntero constante.
// No se puede alterar la dirección de memoria a la que apunta.
ptrFoo=&bar;
}
Un puntero constante a un dato constante
El puntero constante apunta siempre a la misma dirección de memoria y el valor al que apunta dicho puntero no puede ser modificado mediante el puntero. Este es el metodo en que se debe pasar matrices a funciones que solo leen la matriz y no la modifican.
#include <iostream>
usingnamespace std;
int main ()
{
int foo =3, bar;
constint*const ptrFoo =&foo;
cout<< foo;
*ptrFoo =53;//Error porque no puede alterarse el valor
ptrFoo =&bar;// Error
foo =23;
cout<< foo;
}
No hay comentarios:
Publicar un comentario