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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 37
171  Programación / Programación C/C++ / ¿Las matrices se pasan a las funciones por valor o referencia? [C] en: 4 Junio 2016, 16:50 pm
Hola, gente.

Citar
Passing a One-Dimensional Array
When a one-dimensional array is passed to a function, the array’s address is passed by
value. This makes the transfer of information more efficient since we are not passing
the entire array and having to allocate memory in the stack for it. Normally, this means
the array’s size must be passed. If we don’t, from the function’s perspective all we have
is the address of an array with no indication of its size.

Los consulto porque tengo una duda con esta parte del libro, si mi traductor no falla dice que las matrices se pasan a funciones por valor, yo tengo entendido que el identificador de una matriz contiene la dirección de memoria del primer elemento o primer byte de la misma, por lo tanto, cualquier modificación que se efectué en la función llamada se ve reflejado en la función llamadora como lo refleja el código que dejo a continuación. -

Código
  1. #include <stdio.h>
  2.  
  3. void ab( int a[], size_t tam );
  4.  
  5. int main( void ){
  6. int a[] = {5, 3, 8, 99, 11};
  7. size_t tam = 5;
  8.  
  9. printf( "\n \"a\" antes de la llamada a la funcion vale........:%d", a[0] );
  10. ab(a, tam);
  11. printf( "\n \"a\" despues de la llamada a la funcion vale......:%d\n\n", a[0] );
  12.  
  13.  
  14. }
  15.  
  16. void ab( int a[], size_t tam ){
  17. a[0] = 1;
  18. }
  19.  
Es todo, espero que alguien me diga como debo interpretar esto. -   

Saludos.
172  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 26 Mayo 2016, 03:11 am
Hola, Alberto. -
Gracias por tu tiempo, realmente te agradezco porque creí que nadie ya me iba a decir si era correcto o no mi solución (muchos en España estarán durmiendo 3:14 de la madrugada), funciona a la perfección y me ayudaste a entender un poco más los arreglos. -

Un abrazo.
173  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 25 Mayo 2016, 23:19 pm
¿Es esta la manera correcta?, ya no me da error, estas en lo cierto.

Código
  1. int *ptr = (int*)malloc(MAX * sizeof(int)+1);
  2.  


Esta parece mas correcta.-
Código
  1. int *ptr = (int*)malloc((MAX+1) * sizeof(int));


Saludos.
174  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 25 Mayo 2016, 22:59 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 150
  5. #define TABLA 5
  6.  
  7. int main( void ){
  8. size_t i=1;
  9. int *ptr = (int*)malloc(MAX * sizeof(int));
  10.  
  11. while( i<=MAX ){
  12. ptr[i] = i*TABLA;
  13. printf( "\n %2lu x %d = %2d", i, TABLA, ptr[i] );
  14. i++;
  15. }
  16.  
  17. free(ptr);
  18.  
  19. return 0;
  20. }
175  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 25 Mayo 2016, 22:12 pm
Gracias ivancea...
Con la práctica me surgió un error inesperado, por lo menos para mí, tengo claro que lo podría hacer con una sola variable y volcar el resultado en la misma en cada iteración, pero el caso es que estoy aprendiendo memoria dinámica y me encuentro con este inconveniente. -



Código
  1. #define MAX 150
  2. #define TABLA 5
  3.  
Uds. me dirán.
Saludos.
176  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 25 Mayo 2016, 19:55 pm
Hola.
Estoy todavía un poco perdido y espero que no sea lo mismo que pregunte al principio. -
En la mayoría de los casos encuentro esta declaración para malloc
Código
  1. int *ptr = (int*)malloc(MAX * sizeof(int));
pero como lo encontré en otro Ej. también funciona, ¿no es necesario incluir...(int*)...?

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 15
  5. #define TABLA 3
  6.  
  7. int main( void ){
  8. size_t i=1;
  9. int *ptr = malloc(MAX * sizeof(int));
  10.  
  11. while( i<=MAX ){
  12. ptr[i] = i*TABLA;
  13. printf( "\n %2lu x %d = %2d", i, TABLA, ptr[i] );
  14. i++;
  15. }
  16.  
  17. free(ptr);
  18.  
  19. return 0;
  20. }
  21.  
Saludos.
177  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 24 Mayo 2016, 23:40 pm
Hola, geeke, gracias por ocuparte.
Yo debería releer los mensajes, lo que decís de si pasas un puntero NULL y un tamaño distinto a cero a realloc se comporta como malloc (ya lo había dicho ivancea96) ahora que lo repetís me aclaro todo. - 

Saludos.   
178  Programación / Programación C/C++ / Re: Arreglo con memoria dinámica en lenguaje C. en: 24 Mayo 2016, 20:46 pm
Hola.
La primer pregunta está clara, en cuanto a la segunda, creí que obligatoriamente se debería hacer algo como esto, pero parece que no es necesario. -

 
Código
  1.       ......................
  2.        V =  (float *) malloc(N * sizeof(float));
  3. do {
  4. V = (float*) realloc( V, (N+1)*sizeof(float) );
  5.        .........................

Saludos y gracias.
179  Programación / Programación C/C++ / Arreglo con memoria dinámica en lenguaje C. en: 24 Mayo 2016, 19:45 pm
Hola, gente. -
Dejo aclarado que son mis inicios con memoria dinámica y puedo estar preguntando cualquier sandez, hay 2 cosas que me tienen intrigado:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main( void ){
  5. float *V=NULL;
  6. int N=0,i,ch;
  7. char c;
  8.  
  9. do {
  10. V=( float *)realloc((float *)V,(N+1)*sizeof(float));
  11. printf("\n Ingresa un numero real.................: ");
  12. scanf("%f", &V[N]);
  13. while((ch = getchar()) !='\n' && ch!=EOF);
  14. printf("\n Quieres introducir otro valor? (S/N)...: ");
  15. c=getchar();
  16. N++;
  17. }while (c=='s' || c=='S');
  18.  
  19. for(i=0;i<N;i++)
  20. printf("\n El valor %d es igual a..................: %f\n", i, V[i]);
  21.  
  22. free(V);
  23.  
  24. return 0;
  25. }

Código
  1.     V=( float *)realloc((float *)V,(N+1)*sizeof(float));

En los pocos ejemplos que vi no me parece que estuviera 2 veces en la misma línea el puntero (V) y la otra es ¿no se debería asignar primero con malloc y luego reasignar con calloc? (malloc fuera del bucle do while). -

Es todo, espero me ayuden a aclarar esto. -
Saludos.
180  Sistemas Operativos / GNU/Linux / Aviso de llegada de correo electrónico en casilla de Yahoo. en: 23 Mayo 2016, 20:58 pm
Hola, gente.
Alguien conoce algún programa o extensión para Firefox que avise cundo llega un nuevo correo a Yahoo

Desde ya muchas gracias por vuestro tiempo. -
Saludos.
Páginas: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [18] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ... 37
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines