Como sabemos "Return en las funciones" puede utilizarse para devolver al invocador un valor desde una funcion llamada (o regresar el control desde una funcion llamada sin devolver un valor). Tambien vimos que se le puden pasar argumentos a una funcion mediante argumentos de referencia, permitiendo que la funcion modifique los valores originales de los argumentos(por lo tanto, se puede "devolver" mas de un valor desde una funcion), o pasar objetos de datos grandes a una funcion y evitar la sobrecarga de pasar los objetos mediante llamada por valor (que, claro esta, involucra llevar acabo una copia del objeto).Los apuntadores, como las referencias , tambien pueden servir para modificar una o mas varibles del invocador o para pasar apuntadores a objetos de datos grandes, evitando la sobrecarga de pasar los objetos mediante llamada por valor.
Los programadores se pueden valer de los apuntadores y del operador de indirreccion para simular llamadas por referencia. AL llamar una funcion con argumentos que deben ser modificados, se pasa la direccion de los argumentos. por lo genera, esto se logra aplicandole el operador de direccion(&) al nombre de la variable que se habra de modificar.
Elsiguiente ejemplo contiene dos versiones de una funcion que eleva al cubo un entero:
1-cuboPorValor: en esta se pasa la variable numero1 mediante una llamada por valor, Esta eleva al cubo su argumento y devuelve el valor mediante una insturccion "return". EL nuevo valor se asigna a nummero1. Existe la oportunidad de examinar el resultado de la llamada de funcion antes de modificar el valor de una variable. Por ejemplo, en este programa se podria haber almecenado el resultado de
cuboPorValor en otra variable, examinando su valor asignando el resultado a numero1 tras comprobar que el resultado es razonable.
2-cuboPorReferencia:en esta pasa la variable numero2 mediante una llamada por referencia(se pasa la direccion de numero2) a la funcion cuboPorReferencia. Esta toma nPtr (que es un apuntador a int) como argumento. La funcion desreferencia el apuntador y eleva al cubo el valor alq ue apunta nPtr. Esto cambia el valor de nummero2.
Una funcion que recibe como un argumento una direccion debe definir una parametro de apuntador para recibir dicha direccion.
para C++ seria asi: foto + grande
para C# seria asi:foto + grande
Nota para C#:
Ud. puede declarar cualquier método como no seguro :
public unsafe void MyMethod(){
De forma alternativa, Ud. puede declarar cualquier clase o estructura como no segura:
unsafe class MyClass{
Declarar una clase como no segura implica que todos sus miembros son tratados como no seguros. Ud. puedeademás declara cualquier campo miembro (aunque no las variables locales) como no seguros, si tiene un campo miembro de tipo puntero:
private unsafe int* pX;
También es posible marcar un bloque de código como no seguro de la siguiente forma:
unsafe{// instrucciones que utilizan punteros}
No hay comentarios:
Publicar un comentario