Duda sibre como pasar por referencia en c

pues tengo esa miniduda....a ver, hago este programa:

#include <stdio.h>
#include <stdlib.h>

int CantPalabras (int n)
{
printf("Introduce la cantidad de palabras: ");
scanf("%d", &n);
printf("Dentro de la funcion la cantidad de palabras es: %d\n", n);
return n;
}

main()
{
int n;
n=CantPalabras(n);
printf("Fuera de la funcion la cantidad de palabras es: %d\n", n);
system("pause");
}


lo paso por valor, y en el main principal me dice el valor de n, pero esto no es pasarlo por referencia, no? como sería este mismo programa pero pasado por referencia?
creo que seria asi





#include <stdio.h>
#include <stdlib.h>

void CantPalabras (int *n)
{
printf("Introduce la cantidad de palabras: ");
scanf("%d", &n);
printf("Dentro de la funcion la cantidad de palabras es: %d\n", *n);

}

main()
{
int *n;
CantPalabras(&n);
printf("Fuera de la funcion la cantidad de palabras es: %d\n", *n);
system("pause");
}
David_Snake escribió:pues tengo esa miniduda....a ver, hago este programa:

#include <stdio.h>
#include <stdlib.h>

int CantPalabras (int *n)
{
printf("Introduce la cantidad de palabras: ");
scanf("%d", n);
printf("Dentro de la funcion la cantidad de palabras es: %d\n", *n);
return *n;
}

main()
{
int n;
CantPalabras(&n);
printf("Fuera de la funcion la cantidad de palabras es: %d\n", n);
system("pause");
}


lo paso por valor, y en el main principal me dice el valor de n, pero esto no es pasarlo por referencia, no? como sería este mismo programa pero pasado por referencia?


Mírate también esta página: http://linuxupc.upc.es/~pep/OLD/Punteros.html
Exacto.
Pasar por referencia significa pasar la dirección de una variable (puntero) por lo que dentro y fuera de la función se opera con la misma dirección de memoria.

Pasar por valor pasas el valor que contiene una variable. Lo que hagas con dicho valor dentro de la función no afecta en nada a la variable fuera de la función.
En c++ también se puede hacer así:

#include <stdio.h>
#include <stdlib.h>

int CantPalabras (int &n)
{
printf("Introduce la cantidad de palabras: ");
scanf("%d", &n);
printf("Dentro de la funcion la cantidad de palabras es: %d\n", n);
return n;
}

main()
{
int n;
CantPalabras(n);
printf("Fuera de la funcion la cantidad de palabras es: %d\n", n);
system("pause");
}

Y para evitar confusiones, este tipo de dato (int&) se llama Referencia y este tipo de dato que han usado en la primera solución (int*) se llama Puntero.

PD: Si, esto va como curiosidad xD.
4 respuestas