CitarQuizás es que yo ya me estoy confundiendo, pero es lo mismo retornar un puntero que una variable por referencia, me refiero a algo asi:Si. Básicamente es lo mismo en reglas generales, pero puede haber diferencias técnicas dependiendo del caso.
CitarLa variable i es un puntero que se encuentra en el stack, es decir, luego del return el puntero desaparece, lo que no desaparece es la memoria que reservaste con malloc (que por cierto es un ejemplo de una función que retorna una dirección).
Se que no es es muy buen ejemplo, ya en el primer ejemplo la variable i se crea en el heap, i en el segundo en el stack de la funcion. Lo que venia a decir es que en ambas funciones estamos retornando direcciones de memoria, no?
Obviamente el contenido del heap si es accesible desde otro contexto, por lo tanto el contenido que tenga el entero no se pierde, si se pierde el puntero con el cual estabas manejando ese contenido. Si no retornas la dirección, perdes el puntero y también perdes la dirección de la memoria que reservaste, y con esto, la posibilidad de liberar esa memoria.
Código [Seleccionar]
stack||||heap
i----->block
El otro caso es diferente, porque retornas una dirección pero de una variable que se encuentra en el stack y ya no es accesible desde otra función. Pero a grandes rasgos, en ambas retornas direcciones.
Saludos!
#Edit:
Para poner codigo:
C
[code=c]codigo[/code]
C++
[code=cpp]codigo[/code]