Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - NOB2014

#171
Hola, gente.

CitarPassing 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. -

#include <stdio.h>

void ab( int a[], size_t tam );

int main( void ){
int a[] = {5, 3, 8, 99, 11};
size_t tam = 5;

printf( "\n \"a\" antes de la llamada a la funcion vale........:%d", a[0] );
ab(a, tam);
printf( "\n \"a\" despues de la llamada a la funcion vale......:%d\n\n", a[0] );


}

void ab( int a[], size_t tam ){
a[0] = 1;
}

Es todo, espero que alguien me diga como debo interpretar esto. -   

Saludos.
#172
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
¿Es esta la manera correcta?, ya no me da error, estas en lo cierto.

int *ptr = (int*)malloc(MAX * sizeof(int)+1);


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


Saludos.
#174
#include <stdio.h>
#include <stdlib.h>

#define MAX 150
#define TABLA 5

int main( void ){
size_t i=1;
int *ptr = (int*)malloc(MAX * sizeof(int));

while( i<=MAX ){
ptr[i] = i*TABLA;
printf( "\n %2lu x %d = %2d", i, TABLA, ptr[i] );
i++;
}

free(ptr);

return 0;
}
#175
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. -



#define MAX 150
#define TABLA 5

Uds. me dirán.
Saludos.
#176
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
int *ptr = (int*)malloc(MAX * sizeof(int));
pero como lo encontré en otro Ej. también funciona, ¿no es necesario incluir...(int*)...?

#include <stdio.h>
#include <stdlib.h>

#define MAX 15
#define TABLA 3

int main( void ){
size_t i=1;
int *ptr = malloc(MAX * sizeof(int));

while( i<=MAX ){
ptr[i] = i*TABLA;
printf( "\n %2lu x %d = %2d", i, TABLA, ptr[i] );
i++;
}

free(ptr);

return 0;
}

Saludos.
#177
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
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. -

       ......................
        V =  (float *) malloc(N * sizeof(float));
do {
V = (float*) realloc( V, (N+1)*sizeof(float) );
        .........................


Saludos y gracias.
#179
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:

#include <stdio.h>
#include <stdlib.h>

int main( void ){
float *V=NULL;
int N=0,i,ch;
char c;

do {
V=( float *)realloc((float *)V,(N+1)*sizeof(float));
printf("\n Ingresa un numero real.................: ");
scanf("%f", &V[N]);
while((ch = getchar()) !='\n' && ch!=EOF);
printf("\n Quieres introducir otro valor? (S/N)...: ");
c=getchar();
N++;
}while (c=='s' || c=='S');

for(i=0;i<N;i++)
printf("\n El valor %d es igual a..................: %f\n", i, V[i]);

free(V);

return 0;
}


     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
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.