Autor
|
Tema: [Solucionado] ¿Cambia el valor de una variable dentro una funcion? (Leído 10,810 veces)
|
Stakewinner00
|
no entendi demasado pero me vendra bien para saber de k va
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Es exactamente el mismo codigo, es un copia y pega de lo que has posteado tu y me sigue dando el fallo. Eso es debido a que la declaración de una referencia: void modificar(int &a) {
Y la reserva de memoria mediante "new": int *a = new int(2);
Son parte del lenguaje C++ (pero no de C). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
overxfl0w13
|
Eso es debido a que la declaración de una referencia: void modificar(int &a) {
Y la reserva de memoria mediante "new": int *a = new int(2);
Son parte del lenguaje C++ (pero no de C). Un saludo De todas formas el uso de punteros, las referencias y la reserva mediante new ha dicho que son puntos a tratar en próximos temas del libro que está siguiendo, nunca viene mal conocerlo
|
|
|
En línea
|
[/url]
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Los punteros los tratan mas adelante en el libro que estoy leyendo, asi que voy a dejarlos para cuando toque, he compilado el codigo que has dejado Sólo necesitas saber ahora que puedes pasar a una función un parámetro o variable por valor -que es lo que has visto hasta ahora- y por referencia -que hace uso de punteros y es lo que te queda por ver-. La diferencia fundamental es que en el paso por valor, en la función donde está declarada la variable, su valor no cambia aún después de "pasar" por la función, mientras que en el paso por referencia sí puede cambiar el valor de la variable.Te dejo el código funcionando para los dos métodos:#include <stdio.h> void modificar(int a) { a *= 3; printf("\n\na = %d (desde la funcion, modificando el valor)", a ); return ; } void modificar1(int *a) { *a *= 3; printf("\n\na = %d (desde la funcion, modificando el valor)", *a ); return ; } int main() { int *a = 2; printf("\n\nPaso por valor\n"); printf("\na = %d (desde main, antes de llamar a la funcion)", a ); modificar(a); printf("\n\na = %d (desde main, despues de llamar a la funcion por valor)", a ); printf("\n\nPaso por referencia con puntero\n"); printf("\na = %d (desde main, antes de llamar a la funcion)", a ); modificar1(&a); printf("\n\na = %d (desde main, despues de llamar a la funcion por referencia)", a ); printf("\n\na = %d (desde main, OTRA VEZ antes de llamar a la funcion)", a ); modificar1(&a); printf("\n\na = %d (desde main, despues de llamar a la funcionpor referencia )", a ); return 0; }
Por si te animas a empezar a leer sobre punteros, aquí va un ejemplo:#include <stdio.h> int main() { int i=0,*puntero,*pmat; int valor = 52; int mat [10]; mat[0]=10, mat[1]=30,mat[2]=50,mat[3]=60; puntero = &valor; printf("puntero apunta a %p\n", puntero ); printf("la direccion de memoria de &valor es %p\n", &valor ); printf("el valor de 'valor' es %d\n", valor ); printf("el valor de aquello a lo que apunta *puntero es %d\n", *puntero ); *puntero += 25; printf("el valor de aquello a lo que apunta *puntero += 25 es %d\n\n\n", *puntero ); pmat=&mat[0] ;//<=== pmat "apunta=da" a la direccion de mat[0] printf("pmat apunta a la direccion %p\n\n", pmat ); printf("el valor de aquello a lo que apunta *pmat=mat[0] es %d\n\n", *pmat );//10 i=*++pmat;//<=== pmat "apunta" a la direccion de mat[1] printf("el valor de aquello a lo que apunta *++pmat=mat[1] es %d\n\n", i );//30 i=*pmat+1; printf("el valor de aquello a lo que apunta *pmat+1=30+1 es %d\n\n", i );//31 i=*(pmat+1);//<=== pmat "apunta" a la direccion de mat[2] printf("el valor de aquello a lo que apunta *(pmat+1)=mat[2] es %d\n\n", i );//50 i=*++pmat;//<=== pmat "apunta" a la direccion de mat[2]; printf("el valor de aquello a lo que apunta *++pmat=mat[2] es %d\n\n", i );//50 i=*++pmat;//<=== pmat "apunta" a la direccion de mat[3] printf("el valor de aquello a lo que apunta *++pmat=mat[3] es %d\n\n", i );//60 i=*pmat+5;//<=== pmat "apunta" a la direccion de mat[3]+5 printf("el valor de aquello a lo que apunta *pmat+5=mat[3]+5 es %d\n\n", i );//65 return 0; }
Saludos!
|
|
« Última modificación: 3 Octubre 2012, 00:56 am por leosansan »
|
En línea
|
|
|
|
Caster
|
Lo de paso por valor es de lo ultimo que he visto, ahora estoy con la recursividad, y ya he visto que el valor de variable solo cambia en la propia funcion, fuera no, lo de los punteros y esas cosas vienen explicadas mas adelante, asi que las vere cuando toque, muchas gracias a todos.
Saludos
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
lo de los punteros y esas cosas vienen explicadas mas adelante, asi que las vere cuando toque Aunque te toque más adelante procura guardar los ejemplos que te postee, son clarificadores e incluyen aritmética de punteros. Por cierto, ¿Qué libro estas siguiendo para el estudio del C?. Gracias y un saludo.
|
|
« Última modificación: 3 Octubre 2012, 12:08 pm por Eternal Idol 7D »
|
En línea
|
|
|
|
anonimo12121
|
es así para cambiar el valor de una variable puesta en el argumento. tipo name(tipo &);
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
es así para cambiar el valor de una variable puesta en el argumento. tipo name(tipo &);
Estan hablando de C, no de C++.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
Caster
|
Pues el libro es Programacion en C de Byron Gottfried de la edicion Mc Graw Hill.
overfl0w13, por si lees esto, lo del alcance de las variables, varibles locales, globales, estaticas y eso que creo que es de lo que hablas es justo el tema siguiente en mi libro al de las funciones que estoy viendo ahora.
Saludos
|
|
« Última modificación: 3 Octubre 2012, 18:43 pm por Caster »
|
En línea
|
|
|
|
overxfl0w13
|
Pues el libro es Programacion en C de Byron Gottfried de la edicion Mc Graw Hill.
overfl0w13, por si lees esto, lo del alcance de las variables, varibles locales, globales, estaticas y eso que creo que es de lo que hablas es justo el tema siguiente en mi libro al de las funciones que estoy viendo ahora.
Saludos
Pues píllalo con ganas la cosa se pone interesante
|
|
|
En línea
|
[/url]
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Exportar el valor de una variable dentro de un ciclo a otro.
Programación C/C++
|
josri
|
1
|
2,305
|
26 Mayo 2013, 09:45 am
por leosansan
|
|
|
Multiplicación del valor dentro de la función
Desarrollo Web
|
RoxyHana
|
2
|
2,260
|
2 Agosto 2013, 20:34 pm
por RoxyHana
|
|
|
Asignar valor a una variable aleatoriamente dentro de un rango definido
Programación C/C++
|
serg2404
|
1
|
3,541
|
29 Junio 2016, 01:00 am
por AlbertoBSD
|
|
|
Funcion de modificar archivos copia el valor de variable a todos los registros
Programación C/C++
|
lifegame
|
2
|
2,128
|
28 Mayo 2017, 18:30 pm
por lifegame
|
|
|
No cambia el valor de mi variable JS
Desarrollo Web
|
SrTrp
|
4
|
4,026
|
3 Mayo 2020, 22:52 pm
por @XSStringManolo
|
|