elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arreglo de apuntadores vs. arreglo común en lenguaje C.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arreglo de apuntadores vs. arreglo común en lenguaje C.  (Leído 1,674 veces)
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Arreglo de apuntadores vs. arreglo común en lenguaje C.
« en: 1 Octubre 2016, 04:02 am »

Hola, gente -
Mi pregunta es, ¿hay alguna diferencia en trabajar directamente con un arreglo (en este caso de enteros) o hacer un arreglo de apuntadores a ese arreglo? -
Me construí este pequeño código y me surgió la duda, les agrego otra pregunta por qué seguramente muchos de los que saben en este foro tendrán muchas horas de práctica, ¿se han encontrado en algún momento con la necesidad de utilizar este tipo de código o vieron a otros utilizarlo?

Código
  1. // Viernes 30 sep 2016 20:39:55 ART  Arreglo de apuntadores
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. #define MAX 25
  8.  
  9. void llenar( int vector[] );
  10. int *arregloPtr( int vector[], int *vectorPtr[] );
  11. void mostrar( int *vectorPtr[] );
  12.  
  13.  
  14. int main(int argc, char **argv){
  15. int vector[MAX], *vectorPtr[MAX];
  16.  
  17. llenar( vector );
  18. *vectorPtr = arregloPtr( vector, vectorPtr );
  19. mostrar( vectorPtr );
  20.  
  21. return 0;
  22. }
  23.  
  24. void llenar( int vector[] ){
  25. int i;
  26. srand ( time(NULL) );
  27.  
  28. for( i=0; i<MAX; i++ ){
  29. vector[i] = rand() % 100;
  30. }
  31. }
  32.  
  33. int *arregloPtr( int vector[], int *vectorPtr[] ){
  34. int i;
  35.  
  36. for( i=0; i<MAX; i++ ){
  37. vectorPtr[i] = &vector[i];
  38. }
  39.  
  40. return *vectorPtr;
  41. }
  42.  
  43. void mostrar( int *vectorPtr[] ){
  44. int i;
  45.  
  46. for( i=0; i<MAX; i++ ){
  47. if( i % 5 == 0 ){
  48. printf( "\n" );
  49. }
  50. printf( " %2d", *vectorPtr[i] );
  51. }
  52. printf( "\n\n" );
  53. }

Desde ya muchas gracias y saludos.


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
dato000


Desconectado Desconectado

Mensajes: 3.033



Ver Perfil
Re: Arreglo de apuntadores vs. arreglo común en lenguaje C.
« Respuesta #1 en: 1 Octubre 2016, 23:29 pm »

En mi opinión cada caso es diferente, el uso de arreglos lo dejo para casos en los que podria saber que tipo de información y la cantidad de datos se estableceran, es decir, puedo determinar un limite en el control de datos y establecer un código que me permita trabajar con ese tipo de info, al saber exactamente cuantos elementos voy a incluir, puede decirse que manejo cierta información estatica.

Para ese caso, el uso convencional de arreglos, matrices y vectores viene perfecto.

Ahora, si no puedo saber la cantidad de elementos que voy a almacenar, sino que es el usuario quien me determina ese dato, y solo podria saber el tipo de información, tengo que solicitar un rango de memoria a los elementos del pc, para abrir espacios de memoria y poder guardar la información, teniendo el sitio de trabajo establecido, necesito apuntar a esos lugares por medio de punteros para usar esa información.

Por ello, los apuntadores son importantes, pues son los que me permiten establecer un dinamismo en el uso de la memoria que voy a controlar.

En el caso de un arreglo de puntos, pues es una forma similar de trabajar con matrices, o arreglos
  • [y], inicializas un numero determinado de posiciones para cierto tipo de objeto, y puedes usar ese objeto para guardar cualquier tipo de información diferente, en el que puedes incluso guardar espacios de memoria para cualquier tipo de info, como es en el caso de los apuntadores.

en mi opinión no me parece lo mejor mezclar ese tipo de conceptos, pues hace mucho más dificil el entendiiento y el posterior soporte para ese proyecto, el código se hace muy enredado y la escalabilidad en muchas ocasiones requiere crear nuevos patrones de sintaxis y termina con inconsistencias en el código, por decirlo de una forma suave.



En línea


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines