Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Como contar el total de items en un array

Estas en el tema de Como contar el total de items en un array en el foro de C/C++ en Foros del Web. Hola amigos!! Quisiera saber como contar la cantidad de valores que tiene un array, probé muchas maneras, pero no funcionan, por ejemplo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...

  #1 (permalink)  
Antiguo 13/04/2014, 06:40
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Como contar el total de items en un array

Hola amigos!!

Quisiera saber como contar la cantidad de valores que tiene un array, probé muchas maneras, pero no funcionan, por ejemplo:

Código C++:
Ver original
  1. int N[] = {1, 2, 3, 6};
  2.     N[5] = 4;
  3.     int nElementos = sizeof(N)/4;
  4.     cout << nElementos << endl;

eso me devuelve 4, siendo que yo agrego un valor:

Código C++:
Ver original
  1. N[5] = 4;

pero no lo agrega, bueno me maté pensando porque no lo agragaba y en realidad si lo hace, porque si yo haría:

Código C++:
Ver original
  1. int N[] = {1, 2, 3, 6};
  2.     N[5] = 4;
  3.     cout << N[5] << endl;

me mostraría sin problemas el número 4
sin embargo no me da el total, no se porqué.

¿Que estoy haciendo mal?

Gracias.

PD: ¿Cual es la diferencia de Vector y Array? ¿Son iguales?
  #2 (permalink)  
Antiguo 13/04/2014, 07:49
 
Fecha de Ingreso: diciembre-2013
Mensajes: 150
Antigüedad: 10 años, 4 meses
Puntos: 8
Respuesta: Como contar el total de items en un array

Yo no tengo tanta experiencia, pero sé que cuando colocaste

Código C++:
Ver original
  1. int N[] = {1, 2, 3, 6};
  2.     N[5] = 4;

Hiciste un error, porque el array solo podía tener capacidad para 4 elementos, e insertaste un 4 en una posicion 5 que no existía. Por tanto, sobreescribiste un área de memoria que lo más probable es que no te pertenecía.

Yo, mientras navegaba por internet, encontré un artículo en mi blog, que espero que te sirva sobre ese tema.

http://algoritmosypseudocodigo.blogs...-un-array.html

Es bastante útil, y espero que te sirve. Si alguna cosa, vuelve por acá te ayudaremos
__________________
¿Necesitas ayuda con algún algoritmo? Si tienes dudas, entonces visita: http://algoritmosypseudocodigo.blogspot.com/.

Última edición por jhonny6721; 13/04/2014 a las 07:56 Razón: Errores ortograficos leves.
  #3 (permalink)  
Antiguo 13/04/2014, 08:15
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como contar el total de items en un array

hola jhonny6721, creo que es opcional especificar el tamaño de un array, de todas maneras le especifiqué un tamaño por ejemplo 20 y me devuelve el valor 20, cosa que no debería suceder, ya que yo tengo por ejemplo 4 valores:

Código C++:
Ver original
  1. int N[20] = {1, 2 ,3, 6}
  2.     N[6] = {4};

ahí quice agregar el quinto valor, pero no se agrega, también probé así:

Código C++:
Ver original
  1. int N[20] = {1, 2 ,3, 6}
  2.     N[6] = 4;

pero tampoco funciona, además me devuelve 20 y yo tengo tan sólo 4 valores.

En el código de tu blog probé esto:

Código C++:
Ver original
  1. ///Hecho por Jorge Mesa
  2.  
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. int array[] = {3, 5, 9};
  8.  
  9. int main()
  10. {
  11.     ///Array con elementos.
  12.     int array[] = {3, 5, 8, 9, 1, 0};
  13.     array[7] = {2};
  14.  
  15.     int tamano_del_tipo_de_dato; ///Ej. Tamaño de un Int (4 bytes), de un Char (1 byte)
  16.     int tamano_del_array; ///Aplica sizeof al array
  17.     int cantidad_elementos;
  18.  
  19.     ///Obtenemos el tamano de un int y del array usando sizeof.
  20.     tamano_del_array = sizeof(array);
  21.     tamano_del_tipo_de_dato = sizeof(int);
  22.  
  23.     ///Para calcular la cantidad de elementos
  24.     ///Dividimos el tamano del array, entre el tamano de su tipo de dato, por ejemplo enteros.
  25.     cantidad_elementos = tamano_del_array / tamano_del_tipo_de_dato;
  26.  
  27.     cout << endl;
  28.     cout << "Cantidad de elementos: " << cantidad_elementos << endl;
  29.  
  30.     return 0;
  31. }

como podés observar intenté poner otro valor más y no se pudo, "no se almacena en el array", pero si en memoria.
Creo que no es necesario que especifiqués 2 veces el array ya que con sólo una vez es lo correcto.
Tu código estaba mal, tenés que corregir eso porque los << estaban inversos >>, otro error:
#include >iostream<, es muy probable que no lo hayas probado a ese código y eso debés hacerlo para evitar que alguna persona no tenga problemas y así comprobar que el código funciona perfectamente.

Igualmente te agradezco, gracias amigo!!

PD: Intenté agregar el valor 2 al array:
Código C++:
Ver original
  1. array[7] = {2};
pero no se agregó en el código que dejaste de ejemplo.
  #4 (permalink)  
Antiguo 13/04/2014, 08:32
 
Fecha de Ingreso: diciembre-2013
Mensajes: 150
Antigüedad: 10 años, 4 meses
Puntos: 8
Respuesta: Como contar el total de items en un array

Ah, disculpa por los signos invertidos, es que esos caracteres salen invertidos de vez en cuando porque el resaltador de sintaxis no los acepta. Ya están corregidos.

En cuanto al codigo del blog, cuando lo probé si me dio la cantidad de elementos que tenía el array.

Lo que pasa es que estás tratando de agregar un elemento a un array que es estático y cuyo tamaño ya fue definido en tiempo de compilación. Por eso es que no funciona, porque si al array le otorgaste, por ejemplo, capacidad para 4 valores, en tiempo de ejecución ya no podrás agregar más.

Si lo que deseas es tener un array, al cual puedas agregarle tantos elementos quieras en el momento que quieras, te recomiendo que uses algo llamado vector.

Un vector es un array que puede crecer con el tiempo. Para que tengas mayor información, te dejo unos links.

http://es.wikibooks.org/wiki/Program...illas/Vectores

http://olimpiada-informatica.org/guiastl.pdf

Si alguna cosa, me avisas.
__________________
¿Necesitas ayuda con algún algoritmo? Si tienes dudas, entonces visita: http://algoritmosypseudocodigo.blogspot.com/.
  #5 (permalink)  
Antiguo 13/04/2014, 11:15
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

El array es constante y tu le agregas otro tamaño como dijo jhonny sobrescribes memoria, tienes que utilizar memoria dinamica.
Por otro lado creo que es imposible saber el tamaño de un array ya que no termina con nada como por ejemplo en las cadenas con \0 que también son arreglos arrays...
Hazte una clase con dos miembros una para el tamaño otra para el arreglo.

Saludos
  #6 (permalink)  
Antiguo 13/04/2014, 12:16
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Como contar el total de items en un array

hola principe_azul.
bueno yo uso este metodo para ver la cantidad de elementos que tiene un array nose si es lo que andabas buscando pero bueno espero ayudarte.

Código C:
Ver original
  1. #include <cstring>
  2. #include <iostream>
  3. using namespace std;
  4. main ()
  5. {
  6.     char cadena[10] = {3, 5, 8, 9, 5, 6, 7}, hola[15];
  7.     int valor, h, i, valordos;
  8.     valor = strlen(cadena);
  9.     cout << "Cantidad de elementos: \n" << valor;
  10.     //ejemplo 2
  11.     cout<< "\n hola introduce tu nombre\n";
  12.     cin>>hola;
  13.     valordos= strlen(hola);
  14.     cout<<"hola tu nombre tiene un total de caractes:  \n"<< valordos <<"\n";
  15. }
  #7 (permalink)  
Antiguo 13/04/2014, 12:49
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

Hola Drewermerc la función strlen utiliza el carácter nulo de terminación de cadena en los string por lo tanto no funciona en int u otro tipo...
  #8 (permalink)  
Antiguo 13/04/2014, 13:04
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Como contar el total de items en un array

Los arreglos tienen tanta memoria como se pida:

int a[4]

se pide memoria para 4 enteros,

cuando se indica asi:

int a[] = { 2,3,4 };

le digo al compilador "estoy pidiendo tanta memoria como inicializadores haya a la derecha".
En el ejemplo, puse 3 inicializadores, el arreglo es entonces de tamaño 3 (enteros).

Si defino ambos:

int a[5] = {1,2,3};

gana la definicion de la izquierda (hay espacio para 5, pero definí explicitamente 3)



Por otro lado, C y C++ entregan una "pistola cargada", en el siguiente sentido:

mientras te da la libertad de usar los indices que uno quiera al usar el nombre del arreglo

a[0], a[1], a[2]

para que se indiquen o modifiquen los valores del arreglo de mas arriba,

la pistola cargada permite que uno apunte a su pie y dispare, al usar un indice fuera de los limites que tiene ese arreglo.

a[3] = 0

esta asignando a alguna parte de la memoria que no pedí.

¿Como saber el tamaño del arreglo?

Si definimos "tamaño del arreglo" = espacio en memoria solicitado:

basta usar la formula

sizeof(nombre) / sizeof( 1 elemento )

para el ejemplo:

sizeof(a) / sizeof(int)

Si definimos "tamaño del arreglo" = numero de espacios ocupados por mi, usando mi conciencia y que se ve claramente en el codigo que lo hice yo.

Entonces el lenguaje no te apoya en esto, pues el arreglo no sabe de que tamaño es.

El vector en cambio, sabe de que tamaño es, pero para insertar elementos no se usa el operador [], este solo se usa para consultar un elemento que ya se insertó antes.
__________________
Visita mi perfil en LinkedIn
  #9 (permalink)  
Antiguo 13/04/2014, 13:45
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Como contar el total de items en un array

hola patilanz.
bueno pues si tal vez no funciona con las variables tipo int float etc. pero puedes usar un array para capturar numero o cualquier tipo de dato y por lo tanto si lo puedes usar al introducir numero ya solo se hacer una comprobacion que el valor introducido solo son numero que no son mas que tres lineas y bueno pues ami se me hace mejortambien por que si ingreso un caracter especial como #$%& no dara error en cambio si usas int esto si te da un error pero bueno creo que cada quien se adapta a sus metodos de programar no crees.
  #10 (permalink)  
Antiguo 13/04/2014, 13:58
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como contar el total de items en un array

jhonny Gracias!! Muy amable campeón!!
Por cierto, muy lindo tu blog, te felicito!!

patilanz Gracias. pero soy muy nuevo en C++, primero quiero aprender lo más básico y después pasar algo más complejo como son las clases.

Drewermerc Muchas gracias, probé el código pero no es lo que necesito porque en ningún lado se agrega un valor al array cadena u hola

CalgaryCorpus Gracias amigo, pero no entiendo bien lo que me explicaste, osea no sé si es posible agregar valores a un array o no, parece que no se puede.
Con un ejemplo simple podría entender. Usé tu ejemplo pero no me funcionó, me devuelve 5 cuando en realidad debe devolverme 4...

Código C++:
Ver original
  1. int N[5] = {1, 2, 3};
  2.     N[4] = 20;
  3.     int nElementos = sizeof(N)/sizeof(N[0]);
  4.     cout << nElementos << endl;

esto me devuelve 5 y tan sólo tiene 4 valores, comprendo que el array se ha creado con un tamaño hasta 5 valores, pero lo que yo necesito si o si es que de alguna manera, técnica o método, me devuelva el valor 4 ya que existen 4 valores en el array N, pero como había puesto antes, si yo pongo así por ejemplo:

Código C++:
Ver original
  1. int N[5] = {1, 2, 3};
  2.     N[4] = 20;
  3.     cout << N[4] << endl;

me devuelve 20, si lo más probable es que se almacena en memoria pero no en el array.

Estoy confundido, no sé si es o no posible modificar un array, lo que pasa que necesito guardar en un array números de líneas de un archivo para poder ayudar a un usuario de este Foro con una duda que tiene.

Si no es posible agregar valores a un array, entónces que otro método me recomiendan?

Muchas gracias a todos por su ayuda!!!
  #11 (permalink)  
Antiguo 13/04/2014, 14:29
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Como contar el total de items en un array

hola principe_azul.
bueno mira no se si te sirva esto creo que es lo que andas buscando sino dime y te sigo ayudando.
Código C:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4. main ()
  5. {
  6.     int  valor, ;
  7.     char n[5] = {1,2,3};
  8.         n[3] = '5';
  9.     valor = strlen(n);
  10.     cout<< "numero de carcateres \n"<< valor << "\n";
  11.    
  12.    
  13. }
  #12 (permalink)  
Antiguo 13/04/2014, 14:32
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Como contar el total de items en un array

Los arreglos son del tamaño que defines, no del uso. Asi funciona en el lenguaje C aunque quieras significar otra cosa.

Es errado que digas

" me devuelve 5 cuando en realidad debe devolverme 4.."

porque de acuerdo al lenguaje DEBE devolverte 5.

Si quieres que el tamaño varíe de acuerdo al uso (o sea, si inserto 4, quiero que el tamaño sea 4), sugiero uses "vector". El problema alli es que para crear valores no se usa [] sino push_back u otros metodos. El operador [] en los vectores se usa para ver o para cambiar lo que ya existe.
__________________
Visita mi perfil en LinkedIn
  #13 (permalink)  
Antiguo 13/04/2014, 15:20
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como contar el total de items en un array

Lo que dice CalgaryCorpu es correcto.

En tu ejemplo creas un array de 5 enteros. ¿Como espera que te devuelva 4?Eso seria incorrecto.
sizesizeof() devuelve el tamaño que ocupa en memoria de una variable o cualquier objeto como una estructura.

Por ejemplo un entero en mi ordenador ocupa 4bytes cosa que puede variar en otro ordenador. Para saber puedes usar la sentencia sizesizeof(int) que te dio Cal que va retornar el tamaño que tiene.
Bien ahora digamos que me devuelve 4bytes para nuestro ejemplo.
Un array no es mas que un conjunto de variables consecutivos en la memoria del ordenador.
El array en si es un puntero que apunta a el primero de los enteros, pero realmente son enteros lo que contiene.
Si un entero tiene 4bytes cuanto debería tener 2 enteros pues tiene 8bytes.
Si usas sizeof(array) obtienes la cantidad de enteros pero no su cantidad en numero sino en bytes.
Si en tu ordenador un entero tiene 4bytes pues lo divido por 4 me va devolver 1.
entonces la sentencia de sizeof(array) / sizeof(int) en realidad es eso: El tamaño del array en bytes dividido por el tamaño de un entero(4bytes en nuestro caso).
Así se obtiene el tamaño.
Y ahora sobre si puedes aumentar el tamaño del array pues como comenta patilanz o no me acuerdo, no se puede.
Cuando creas un array lo creas en el Heap o mas conocido como la pila no se cambian ni se destruyen. Las variables creadas en la pila se destruyen cuando la función en cuestión termina y es cuando la memoria se libera, y lo hace de forma automatica.
Si quieres poder aumentar o reducir el tamaño de un array debes usar el free storage o memoria dinámica como quieras llamar XDD. Pero eso ya entra en temas de punteros.
Escucha con el oído Manuel que hay buenos consejos aquí =D
Suerte!

PD: para poder cambiar de tamaño puedes usas otros sistemas como por ejemplo vectores, pero solo en cpp creo :D
  #14 (permalink)  
Antiguo 13/04/2014, 19:10
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como contar el total de items en un array

Hola nuevamente amigos!!

Drewermerc Gracias por tu ayuda, he probado tu código, pero me he dado cuenta que tiene dos errores.
El error está acá:

Código C++:
Ver original
  1. int  valor, ;
  2.     char n[5] = {1,2,3};

primero la variable "valor" termina con una coma por lo que al compilar me dará error, luego del nombre de la variable (si es que no hay otra más) se debe finalizar la línea con punto y coma.

Otro error es este:

Código C++:
Ver original
  1. char n[5] = {1,2,3};
  2.         n[3] = '5';

el array "n" fue creado con un único tipo, el mismo es el integer, por lo tanto no es posible alternar entre diferentes tipos de datos que se guardarán en un array, es decir si un array fue creado de tipo "int" no puedes no agregar un valor del tipo char, esto no es válido.

De todas maneras he probado tu código y sólo me agrega una línea:

Código C++:
Ver original
  1. n[3] = '5';
  2.         n[4] = '10';

la primera la agrega, pero la segunda no.
Cuando se utilizan arrays del tipo char, el fin del array debe terminar con una barra invertida y el número cero "\0".

Igual muchísimas gracias, gracias de corazón por tu gran ayuda y los demás compañeros que me corrijan si lo que dije no es cierto.
Gracias por tu amabilidad!!


CalgaryCorpus y vangodp estoy totalmente de acuerdo con ustedes, si un array fué creado con un tamaño de 10 valores, por más que el array tenga tan sólo 7 por ejemplo, lo mismo el tamaño será de 10 ya que el compilador a ocupado un espacio en memoria de mi pc para agregar los valores por más que algunos valores queden nulos.


Bueno por suerte y gracias a jhonny6721 pude solucionar mi problema!! En realidad pude comprender que los arrays en C++ son igual que las tuplas en Python y que los vectores en C++ son lo mismo que las Listas en Python, ya que en Python las tuplas son inmutables, pero las listas no, así que se pueden modificar las listas y vectores.
Bajé el pdf que me dejaste jhonny y ahí vi los métodos para contar el total de valores un vector y también para agregar valores, eso era justamente lo que necesitaba.
Te agradezco enormemente a vos y a todos por sen tan amables y pacientes!!
Gracias a todos por ayudarme!!!

Aquí dejo un ejemplo que era lo que yo necesitaba, esto es un ejemplo de un vector:


Código C++:
Ver original
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. int main () {
  7.     vector<int> Linea(0);
  8.     Linea.push_back(20);
  9.     Linea.push_back(49);
  10.     Linea.push_back(202);
  11.  
  12.     cout << Linea[0] << Linea[1] << Linea[2] << endl; // Me devuelve 20 49 y 202
  13.     cout << Linea.size() << endl; // Me devuelve 3
  14. }

Buena suerte compañeros!! Hasta pronto
  #15 (permalink)  
Antiguo 13/04/2014, 19:28
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Como contar el total de items en un array

hola principe_azul.
perdon por los errores entonces creo que te pubique el primer codigo que compile lo siento pero si funciona bien.
no te agrega el segundo dato que le dices por que.
primero nose si recuerdes pero los punteros empiesan a contar desde el cero y el ultimo caracter es el fin de la cadena osea \0.
entonces si declaramos un array n[5] = {1,2,3}; se empecaria a contar asi:
la posicion 0 es para el 1
la posicion 1 es para el 2
la posicion 2 es para el 3
la posicion 3 es para el estan vacio
la posicion 4 es para el fin de la cadena\0

asi que solo para arregar esto lo unico que se nesesita asignarle ams espacio al array y haci ya te agregaba el otro dato.
y bueno pues no es que almacene un tipo de dato char a un int sin que lo que hace la funcion strlen es solo leer el numero de caracteres que hay en una cadena de caracteres y lo debuelve como entero por eso debe ser almacenado en un int.
bueno pues creo que encontraste una solcion para c++ es que yo lo trato hacer mas a modo de c y por lo que yo se en c un vectos es esto vector[15]; pero creo que en c++ cambian unas cosas pero que buenoque pudiste resolver tu problema.
  #16 (permalink)  
Antiguo 13/04/2014, 21:10
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como contar el total de items en un array

Gracias amigo!! Muy gentil!!
Me quedó todo aclarado!!
Un abrazo!!
  #17 (permalink)  
Antiguo 13/04/2014, 21:13
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Como contar el total de items en un array

de nada amigo para eso estamos todos en esta comunidad para ayudarnos y compartir conocimiento y asi aprender y mejorar cada vez mas.
saludos drewermerc.
  #18 (permalink)  
Antiguo 13/04/2014, 21:32
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como contar el total de items en un array

Así es, eso es lo mejor, trabajar en grupo, en equipo!!!
PD: Yo siempre que pueda y sepa los ayudaré!!
  #19 (permalink)  
Antiguo 13/04/2014, 21:37
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Como contar el total de items en un array

claro que si en equipo sean creado los grandes proyectos.
igual siempre que pueda los ayudare a todos.
  #20 (permalink)  
Antiguo 14/04/2014, 04:58
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

Hola primero quiero comentar que en los arrays de int el ultimo elemento creo que no es \0 como en las cadenas y que sizeof(array) te muestra el tamano del array en bytes pero no si lo pasas a funciones por lo tanto esto no funciona:

Código C++:
Ver original
  1. int a[7]={1,2,3,4};
  2.     cout << sizeof(a) << endl;
  3.     test(a);
  4. void test(int a[]){
  5.     cout << sizeof(a);
  6. }

Te imprime 28 y 4
Puedes saber el tamaño solo fuera de la función.
Para solucionar esto se pueden usar vectores en c++ aunque a mi personalmente no me gustan ya que tienen algunas limitaciones y para c como dije antes me creo una clase o estructura sobrecargo operadores y con memoria dinámica sale perfecto y se pueden agregas funciones para ordenar y se puede conseguir mesclar objetos en un array, me refiero a algo como esto:
Código C++:
Ver original
  1. clase a={2,'s',"string",objeto()};

Saludos
  #21 (permalink)  
Antiguo 14/04/2014, 08:09
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como contar el total de items en un array

a es un puntero...cuando hago test(a); estoy pasando un puntero que apunta a la primera de las variables. No hay lógica pasar un puntero si no sabes el tamaño que tiene el array. Si tiene un tamaño de 7 y imprimo a[10] lo hará sin ningún problema XDDD, bien venido a cpp como dice paueky "Estamos solos en el mundo"y nadie te va a mirar eso. Imaginas que declaras un array de 7 y vas y guardas en la casilla 7, estas invadiendo memoria de otros programas. Es mas...hay quien dice que el ultimo espacio nunca debes usarlo. Si necesitas 7 pues creas un array de 8 y dejas uno libre el ultimo al final.
si creo un array de 10 y voy a a[1000] y le imprimo o le meto algo ahi si no salta un error a la hora de compilar y avisa el Sistema operativo tienes acceso a toda la memoria XDDD

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void test ( int a[], int i ) {
  5.     for ( int indice = 0; indice != i; indice++ ){
  6.        cout << *a << endl;   // para que veas que a es un puntero si quitas la * imprime la direcion de memoria :)
  7.        a++;                  // cuando incrementamos la a++ estamos pasando a apuntar la seguinte variable
  8.        
  9.     }
  10. }
  11.  
  12. int main () {
  13.     int a[7] = {1, 2, 3, 4};
  14.    
  15.     test ( a, (sizeof ( a )/sizeof ( int )) );
  16.    
  17.    
  18.     cin.ignore();
  19.     return 0;
  20. }



Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. int main () {
  6.     int a[7];
  7.     //aun que te lo imprima no sabes que tipo es, int, o char, o string... la creo otro programa.
  8.     //estamos decindo que imprima 1000 casillas apartir de donde se guarda la primera variable que apunta a.
  9.     //Si el sistema operativo no tira errores esta operacion es perfectamente posible.
  10.     //Si cambias algo que no sabes estas poniendo en riesgo todo el sistema.
  11.     cout << a[1000];
  12.     cin.ignore();
  13.     return 0;
  14. }
  #22 (permalink)  
Antiguo 14/04/2014, 09:25
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

No creo que el sistema operativo te permita acceder a estos datos ya que así es muy fácil para los virus :D
  #23 (permalink)  
Antiguo 14/04/2014, 13:29
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como contar el total de items en un array

pues yo si que lo hice
¿¿Has probado?? XD
Leer lo hago pero guardar en una memoria que no corresponde no tengo ganas de probar XDDD.
Esos indices los tiene que controlar tu si no estas perdido.
tendrás Bugs por doquier
  #24 (permalink)  
Antiguo 14/04/2014, 13:36
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

Cita:
Iniciado por vangodp Ver Mensaje
pues yo si que lo hice
¿¿Has probado?? XD
Leer lo hago pero guardar en una memoria que no corresponde no tengo ganas de probar XDDD.
Esos indices los tiene que controlar tu si no estas perdido.
tendrás Bugs por doquier
Pues a mi no me funciona con visual studio 2012 ni me deja ejecutarlo por lo menos esto:

Código C++:
Ver original
  1. int a[100];
  2. a[300]=2;

Luego esto:

Código C++:
Ver original
  1. int a[100];
  2. for(int i=100;i<200;i++){
  3.     *(a+(i*4))=2;
  4. }
Me lo ejecuta pero en el bucle no en la primera sino algo mas me muestra el error:

Código error:
Ver original
  1. Infracción de acceso al escribir en la ubicación 0x00490004.

Por lo tanto no se puede...
  #25 (permalink)  
Antiguo 14/04/2014, 14:29
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como contar el total de items en un array

Pues sera ese visual studio que tiene ruedecillas XD
  #26 (permalink)  
Antiguo 14/04/2014, 14:37
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

Probaste escribir?
  #27 (permalink)  
Antiguo 14/04/2014, 14:38
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Como contar el total de items en un array

El problema (o los problemas) se produce al intentar modificar la memoria. No al leerla. En general, sobreescribir memoria podria producir problemas mucho tiempo despues de producida la sobreescritura.

Hay compiladores (como el mostrado, al parecer) que agregan chequeos de limites, otros permiten elegir si se quiere agregar ese chequeo (con el costo en velocidad por cada acceso) y otros no hacen esfuerzo alguno por chequear.

Historicamente los compiladores de C siempre han sido permisivos y con la llegada de mas RAM y mas CPU, se han agregado mas chequeos al compilar y al ejecutar.
__________________
Visita mi perfil en LinkedIn
  #28 (permalink)  
Antiguo 14/04/2014, 14:44
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como contar el total de items en un array

Eso es lo que creo que el compilador y el SO pone frenos al tema sino....
Con los punteros puedes leer lo que sea jeje.
Pero nunca probé cambiar nada que no corresponda por que se me puede cascar todo. XDD
Espero que el compilador vigile por mi si llega a pasar :D
Es el programa que pone trabas sino mira eso: http://articulos.softonic.com/tutorial-cheat-engine
Ese programa busca el valor por ejemplo de founds en la memoria de un determinado juego y puedes hacer trampas XDD

Última edición por vangodp; 14/04/2014 a las 14:54
  #29 (permalink)  
Antiguo 14/04/2014, 15:07
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Como contar el total de items en un array

El sistema operativo supongo que también comprueba si se modifican partes de la memoria que necesita, o no?
  #30 (permalink)  
Antiguo 14/04/2014, 15:16
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Como contar el total de items en un array

Si lo hace pero no siempre.
La explicación la tienes aquí:https://www.youtube.com/watch?v=cPrZv5WIjmw
C++ es un colisionador de partículas XDDD

Etiquetas: funcion, int, items
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:41.