Autor
|
Tema: Arreglo y puntero en una funcion [No me corre] (Leído 4,773 veces)
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
En la escuela, me han dejado un problema sencillo, pero el maestro quiere que usemos, arreglos, punteros y una función, el problema es: "Contar una cierta cantidad de números (he puesto 10) y almacenarlas en mi arreglo, despues de tenerlas ahi, pasarle la direccion de cada datos, no del arreglo completo, sino de cada datos a mi puntero, de cierta forma tambien trabajara como un arreglo de puntero o algo asi, y despues con los punteros hacer el calculo, que en este caso sera una suma, he estado todo el dia, y no me corre, alguna idea... les dejo mi code: code: #include <stdio.h> #include <stdlib.h> #define sise 10 int suma(int arreglo[sise]); void main () { int arreglo[sise], i; for (i=0;i<=sise-1;i++) //Aqui voy recorriendo el arreglo { printf("Escriba el numero\n"); scanf("%d", &arreglo[i]); // voy guardando un dato en cada posicion del arreglo } suma(arreglo[sise]); // mi funcion que trabaja con los datos de mi arreglo } int suma(int xarreglo[sise]) //Inicializacion de mi funcion { int sum=0,i,*pnt[sise]; for(i=0;i<=sise-1;i++) //Con el segundo for, recorro el arrelo de nuevo { pnt[i]=&xarreglo[i]; //doy al puntero la direccion de cada numero guardado en el arreglo sum+=pnt[i]; } printf("La suma es: %d\n",sum); }
|
|
« Última modificación: 12 Noviembre 2012, 14:22 pm por barnix456 »
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
C_1^N
Desconectado
Mensajes: 13
|
Hola barnix456!! A ver.. vi dos cuestiones.. el main deberia devolver un entero pq de esta manera le devuelve el estado a la consola una vez finalizado el programa, cuando le pasas el arreglo a la funcion hacelo sin el [sise] el nombre del arreglo es un puntero al primer elemento del mismo y poniendole un subindice especifico le estas pasando el elemento de la posicion sise, no el arreglo completo.
Saludos!
|
|
|
En línea
|
La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
Hola C_1^N
Siempre me marca ese error, de que "El tipo de devolucion de main no es int", pero no se que es lo que deberia cambiar, si el codigo esta bien, y si lo ejecuto lo hace con normalidad, ahora en cuanto al codigo, le he dado vueltas y vueltas ya le hice esa modificacion que me dijiste, pase la funcion
suma(arreglo[]);
y nada
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Buenas!!! Te he cambiado el código, a ver si es esto lo que necesitas: #include <stdio.h> #include <stdlib.h> #define size 10 void suma(int *arreglo); int main () { int arreglo[size], i; for(i = 0; i < size; i++) { //Aqui voy recorriendo el arreglo printf("Escriba el numero\n"); scanf("%d", &arreglo [i ]); // voy guardando un dato en cada posicion del arreglo } suma(arreglo); // mi funcion que trabaja con los datos de mi arreglo while(getchar() != '\n') ; // Limpia el buffer getchar(); // Pausa la ejecucion del programa hasta que pulses una tecla return 0; } void suma(int *xarreglo) { //Inicializacion de mi funcion int sum = 0, i, pnt[size]; for(i = 0; i < size; i++) { pnt[i] = xarreglo[i]; sum+=pnt[i]; } printf("La suma es: %d\n", sum ); }
Saludos!!
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Hola! Antes que nada, para pasarle a la función el arreglo solo debes hacer: suma(arreglo);
Le estarías pasando por parámetro la dirección al primer elemento del arreglo. Con eso es suficiente para que tu argumento actual actúe ordenadamente. Por otro lado, dentro del for de la función suma no estoy muy seguro de lo que quieres hacer. Pero lo que estás haciendo ahí es sumar las direcciones de memoria de todos los int que forman el arreglo. En realidad no es necesario utilizar ese arreglo de punteros "pnt", pero si tanto lo quieres, fijate que al hacer: sum += pnt[i];
En realidad lo que haces ahí es sumar los punteros (que es lo que guarda pnt) es decir, sumas las direcciones de memoria de cada uno de los int correspondientes. Para que esto funcione, lo que debes hacer es desreferenciar dichos punteros: sum += *pnt[i];
Así estarías sumando los valores correspondientes que apuntan dichos punteros. Si bien esto funcionaría, la verdad es que el code está un poco desordenado y es feo. Fijate de poder arreglarlo y hacer algo más limpio (por ejemplo, ese arreglo de punteros no es necesario). Además, fijate que la función "suma" debería de devolver un "int" y jamás lo hace (sólo imprime la suma por pantalla).
|
|
|
En línea
|
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
Hola satu Gracias por el codigo, no sabia eso para limpiar el bufer, entonces anlizando tu codigo, mi variable pnt que en este caso queria que fuera mi puntero osea de esta manera *pnt, no va, si no el puntero es el arreglo, y pnt viene siendo un arreglo cualqueira, la magia esta en pasar a la funcion nuestro arreglo sin un subindice, bueno sin nada.. gracias....!!
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
una pregunta mas, si estamos trabajando con punteros, puedo imprimir en pantalla la diraccion de ese dato, como lo hago????
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Si por ejemplo tenés una variable de tipo "int": printf("La dirección de la variabe es: %x",&variable );
Lo que hace "%x" es imprimirlo en hexadecimal, y el ampersand (&) te devuelve la dirección de memoria de la variable. Saludos.
|
|
|
En línea
|
|
|
|
C_1^N
Desconectado
Mensajes: 13
|
tamb podes hacerlo con %p
Saludos!
|
|
|
En línea
|
La gestión manual de bloques de memoria en C es como hacer malabarismos con pastillas de jabón en la ducha de la prisión: todo diversión hasta que cometes un fallo
|
|
|
barnix456
Desconectado
Mensajes: 128
El soft es como el sexo, cuando es Libre es mejor
|
gracias muchas gracias...!!
|
|
|
En línea
|
"No temo a los ordenadores; lo que temo es quedarme sin ellos"
Isaac Asimov
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda con puntero a arreglo de caracteres
Programación C/C++
|
dato000
|
5
|
4,845
|
30 Noviembre 2012, 21:13 pm
por xiruko
|
|
|
Necesito ayuda con Puntero a función miembro.(Solucionado)
Programación C/C++
|
anonimo12121
|
0
|
1,923
|
24 Junio 2013, 18:01 pm
por anonimo12121
|
|
|
Puntero de arreglo
Programación C/C++
|
Supermanxd
|
3
|
2,356
|
3 Enero 2016, 01:47 am
por MAFUS
|
|
|
Pasar a función un arreglo con punteros o con el nombre del arreglo como puntero
Programación C/C++
|
NOB2014
|
3
|
3,483
|
9 Junio 2016, 17:10 pm
por geeke
|
|
|
tiene sentido un puntero para uso como arreglo con una dimensión entregada?
Programación C/C++
|
digimikeh
|
5
|
2,659
|
23 Febrero 2019, 02:52 am
por digimikeh
|
|