jueves, 11 de agosto de 2011

Programación en C++/Punteros.."Formas de pasar un valor por referencia"


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