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

Ayuda en C

Estas en el tema de Ayuda en C en el foro de C/C++ en Foros del Web. Código: #include<stdio.h> int main(int argc, char *argv[]) { char c; FILE *file_esc; char *nombre; struct struc{ int hora; int min; int medida; } *dato; dato=malloc(sizeof(struct ...
  #1 (permalink)  
Antiguo 08/08/2006, 18:48
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
Ayuda en C

Código:
#include<stdio.h>

int main(int argc, char *argv[])
{

char c;
FILE *file_esc;
char *nombre;

struct struc{
	int hora;
	int min;
	int medida;
} *dato;

dato=malloc(sizeof(struct struc));

nombre = argv[1];

file_esc=fopen(nombre, "a");

printf( "\n Introduca la hora:");
scanf( "%i", &(dato->hora));
printf( "\n Introduca el minuto:");
scanf( "%i", &(dato->min));
printf( "\n Introduca la medida:");
scanf( "%i", &(dato->medida));

fwrite(dato, sizeof(struct struc),1, file_esc);

fclose(file_esc);
exit(0);
}
1. Que significa
Código:
int main(int argc, char *argv[])
, porke se definen ai el int argc y el char *argv[] y no dentro de la funcion?¿

2.
Código:
dato=malloc(sizeof(struct struc));
. Que kiere decir esto?¿
Dato es un puntero y si se escribe sin * , es decir asi, se refiere al contenido de "dato", es decir, a la direcicon de memoria a la k apunta. Yo siempre habia visto eso d este modo: dato=&a; DOnde &a es la dire d memoria de la variable a, pero k significa pues esto: dato=malloc(sizeof(struct struc));. Que clase de direccion de memoria es malloc(sizeof(struct struc));?¿?
  #2 (permalink)  
Antiguo 09/08/2006, 08:16
Avatar de Pistemas  
Fecha de Ingreso: diciembre-2004
Ubicación: entre las piernas de una hermosa mujer
Mensajes: 1.552
Antigüedad: 20 años
Puntos: 8
Cita:
Iniciado por N0vat0 Ver Mensaje
Código:
#include<stdio.h>

int main(int argc, char *argv[])
{

char c;
FILE *file_esc;
char *nombre;

struct struc{
	int hora;
	int min;
	int medida;
} *dato;

dato=malloc(sizeof(struct struc));

nombre = argv[1];

file_esc=fopen(nombre, "a");

printf( "\n Introduca la hora:");
scanf( "%i", &(dato->hora));
printf( "\n Introduca el minuto:");
scanf( "%i", &(dato->min));
printf( "\n Introduca la medida:");
scanf( "%i", &(dato->medida));

fwrite(dato, sizeof(struct struc),1, file_esc);

fclose(file_esc);
exit(0);
}
1. Que significa
Código:
int main(int argc, char *argv[])
, porke se definen ai el int argc y el char *argv[] y no dentro de la funcion?¿
que al ejecutar el programa en modo texto (consola de comandos),este puede recibir datos como si fuera un comando del Ms-DOS:

Ej: Dir /p (/p es un parametro)
Ej: estructura 1 (donde estructuar es tu programa en C y 1 es el dato con el que trabaja)

Cita:
2.
Código:
dato=malloc(sizeof(struct struc));
. Que kiere decir esto?¿
Dato es un puntero y si se escribe sin * , es decir asi, se refiere al contenido de "dato", es decir, a la direcicon de memoria a la k apunta. Yo siempre habia visto eso d este modo: dato=&a; DOnde &a es la dire d memoria de la variable a, pero k significa pues esto: dato=malloc(sizeof(struct struc));. Que clase de direccion de memoria es malloc(sizeof(struct struc));?¿?
No se esta refiriendo a la posicion de la estructura en la memoria, sino a el tamaño en memoria de dicha estructura; mas claro si tienes una estructura llamada EJ2 de 156 Kb. dato tendria un espadio en memoria de 156 Kb.
  #3 (permalink)  
Antiguo 09/08/2006, 13:43
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
ok, weno tengo algunas otra preguntas sobre otros codigos, k me dan error.
1.
Código:
#include<stdio.h>
void main
{
char *c,*d;
*c=getchar();
*d=getchar();
char *e=(char *c,char *d)
printf("es %d",*p);
}

funcion(char *a, char *b)
{
char *p;
*a + *b=*p;
return *p;
}
Porke esta mal, no esta bien llamada la funcion?¿

2.
Código:
#include<stdio.h>
void main()
{
FILE *p;
char *a;
p=fopen("yo.txt","r");


*a=fgetc(p);

printf(" el valor es %c",*a);
int fclose(FILE *p);

}
Solo me lee un caracter, k puedo hacer para k me lea todo el archivo yo.txt?¿ He escuchado k se puede hacer con la funcion fgets pero no entiendo k tengo k poner en los parametros.

3.
Código:
mapa=(int **)malloc(sizeof(int *)*N1);
k significa este code y porke a veces se pone solo (char*) o (int *) sin poner el nombre del puntero?¿

SAludos.
  #4 (permalink)  
Antiguo 09/08/2006, 19:41
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años, 7 meses
Puntos: 0
1.- ya decalrastes funcion(poner su prototipo), pues solo veo su implementacion

2.- eso creo, es que en la libreria hay funciones para obtener caracteres(getc) y para obtener cadenas(gets).

3.-
malloc(sizeof(int *)*N1 piedes memoria para almacenar *N1 punteros a Int
mapa=(int **) guardas el la direcion donde inicia ese bloque en mapa.

4.- echale toneladas, un te queda un camino largo.
__________________
-> La duda adecuada es un buen comienzo <-
  #5 (permalink)  
Antiguo 10/08/2006, 16:04
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
En realidad lo que necesitas es un buen curso de C, seria mucho explicarte todas tus preguntas, primero intenta leer algun manual de C, y poco a poco ir entendiendo estos ejemplo que muestras.

ya que tienens un buen de dudas, que se muestran en tu cidigo de ejemplo.

aun no usas muy bien las funciones,
aun no tienens en claro que main es tambien una funcion,
no conoces o no sabes lo que son las funciones de la libreria estandar.

no sabes usar prototipos, y por lo visto tampoco conoces el operador sizeof.

eh fin es mucho lo que tienes que aprender.

Disculpa si no aporto nada pero, no veo por donde empezar.

Saludos.
  #6 (permalink)  
Antiguo 11/08/2006, 14:16
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
Bueno, en primer lugar si q lei un manual de C, aunke kizas no practike lo suficiente... Los codigos q puse tienen muchos errores, eso es cierto, y muchos de esos errores no se como los cometi... Voy a poner los codigos otra vez explicando lo q yo entendi del manual q lei... Corrinjame si me akivoco.

Código:
1.

#include<stdio.h> //incluimos la libreria que contiene las funciones q utilizo
char funcion(char *e, char *f);//declaro prototipo de funcion
void main //funcion principal, indispensable para q funcione un programa en C.
{
char *c,*d,*e; //Se definen 3 punteros q apuntan a una variable de tipo char.
*c=getchar(); // introduzco x el teclado 2 cadenas de carcteres (tipo char)
*d=getchar(); //a la que apunta los punteros *c y *d.
*e=(char *c,char *d) //el puntero *e apunta al valor de tipo char q devuelve la funcion, y llamo a la funcion con los dos punteros k apuntan a las 2 cad de caracteres introducidas desde el teclado 
printf("es %d",*e); //imprimo x pantalla la cad de caracteres q me devuelve la funcion 
}

funcion(char *e, char *f)//Defino la funcion "funcion"
{
char *e,*f,*j;//parametro utiliza la funcion
*e + *f=*j;
return *j;//parametro k devuelve
}
2. Sencillamente no comprendo como se utiliza fgets, en el manual pone esto: char *fgets(char *cadena, int n, FILE *stream); , pero no entiendo lo k significa.

3. mapa=(int **)malloc(sizeof(int *)*N1);... Eske al ver esto me resulta un poco lioso.. Se basicamente lo k son pounteros, k contiene una dir d memoria y apuntan a una variable, y k se puede modificar el valor de esa varible con el puntero, por eso yo siempre entendi los punteros, primero definiendolos, char *p, y luego poniendo la var a la k apunta *p=a, por ej pero "mapa=(int **)malloc(sizeof(int *)*N1);" me resulta un poco complejo, sobre todo por k en el manual t lo pone sin explicarte cada cosa, por ej nose k kiere decir ese *N1, o por ej un puntero definido d esta forma (int **), como lo llamas si no le pones el nombre del puntero?¿

Saludos.
  #7 (permalink)  
Antiguo 12/08/2006, 01:58
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Hay errores en la forama que usas los punteros y la forma en que segun tu llamas a tu funcion.


un puntero funciona muy similar a como lo hace una variable comen, la diferencia es su capacidad de desrreferenciarse y otra es que se le puede asignar un array (la direccion de su inicio).

en C las cadenas generalmente se usan como punteros a char aunque podemos tambien usar array de char.

cuando los punteros se usan para manejar cadenas generalmente no se usa la desrreferencia.

C tiene funciones que leen caracteres y que leen cadenas de caracteres, ya sea de la entrada estandar o de ficheros.

getchar(), no lee una cadena sino un solo caracter, por tanto no puedes hacer esto;

char *a;
*a = getchar();

ya que a no tienen una direccion valida, al desrreferencia(*a),probablemente te marque un error de acceso.

lo que si se puede hacer es esto:

char a;

a = getchar();

o

char *a = (char*)malloc(1);

*a = getchar();


cuando hacemos esto(char*) estamos haciendo un casting,

es decir, la funcion malloc retorna un valor de tipo void*
para que podamos asignarlo a un char* tenemos que convertirlo o hacer un casting (char*).

(char**) se usaria para un casting a puntero a puntero a char.

las funciones:

por lo que veo las declaras muy bien, pero no la estas usando bien.

una funcion se usa por su nombre y le pasas por parametros variables declaradas previamente.

no tipos como lo haces.

lo que hace o no la funcion tendrias que explicarlo.

supongo que intentas retornar la suma de los parametros.

si es asi la definicion y uso seria:

char funcion(char e, char f)
{
return e+f;
}

es decir no tienes que usar punteros.
los punteros se usan solo cuando te interese conserbar los cambios dentro de la funcion.

por ejemplo:

void funcion( int a, int b, int* result)
{
*result = a+b;
}

y la usariamos;

int a, b, c;

funcion(a, b, &c);

//c es = al resultado de la suma entre a y b.

sobre cadenas te dire que una cadena no se puede sumar a otra usando el operador de suma(+), sino con la funcion strcat().

para leer una cadena desde el teclado se usa gets()

ejemplo:

char cadena[20];

gets(cadena);

no puedes hacer:

char* cadena;

gets(cadena);

a menos que primero le asignes memoria valida a el puntero cadena;

char* cadena = (char*)malloc(20);

gets(cadena);


fgets() hace lo mismo que gets solo que lee una cadena desde un fichero:

fgets(cadena, numero_de_caracteres_a_leer, fichero);

primero tienes que crear la variable FILE:

FILE* fichero = fopen("unfichero.txt", "r");
char cadena[20];
fgets(cadena, 20, fichero);

por lo general se usa mas la funcion scanf y printfo fscanf y fprinf para lecctura y escritura de la salida y entrada estandar o de ficheros respectivamente.

ya que ademas de leer cadenas puede leer otros tipos como enteros , y de coma flotante.

su uso es:

char cadena[20];
int numero;

scanf("%s %i", cadena, &numero);

hay una serie de indicadores del formato, segun el tipo a leer o escribir.
en tu manual puedes encontrar estos formatos.


en fin, te rrepito, para dejar en claro tus preguntas tendria que darte un pequeño curso de C, y para eso se rrequiere de un buen de lineas.

te aconsejo dejar los punteros para cuando comprendas cosas mas basicas del C, como el uso de los diferentes tipos que maneja el C, las cadenas con arrays y las funciones.

despues de comprender esto te sera mas facil comprender el uso de punteros.

bueno es todo por hoy.

Saludos.
  #8 (permalink)  
Antiguo 12/08/2006, 11:38
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
Buena explicacion me aclaraste mucho, aunke sigo teniendo algunas dudas. A ver..
1. Cuando explicas para q sirve un puntero, por su capacidad para desreferenciarse y y porque se le puede asignar un array (la direccion de su inicio) , a q te refieres con eso? Lo de desreferenciarse, te refieres a x ej :
*p=&var (referencias una variable), y luego cambias la referencia a otra:
*p=&var2?¿ Y lo de se le puede asiganar la direccion de su inicio, a q te refieres, la direccion en la q se almacena el puntero como variable q es?

2. char *a = (char*)malloc(1);.. q se pretende almacenar en el byte q reserva la funcion malloc, el byte q ocupara el tipo char al q apunta el puntero, o el espacio q ocupara el propio puntero , almacenando la direccion d memoria de la variable char? y porke cuando es solo un caracter hay q utilizar malloc y cuando es una cadena no?¿

3. Respecto a las funciones, porke no puedo usar punteros? ya se q lo mas logico seria no usarlos, pero estaria mal usarlos? Yo los estaba usando de la misma forma que uso una variable normal, pasalndole como parametros los punteros y recogiendo otro puntero, por no se puede?

4.
Código:
#include<stdio.h>
void main()
{
FILE *p;

p=fopen("perro.txt","r");

char cad[10];
fgets(cad,10,p);

printf(" el valor es %c",cad);
int fclose(FILE *p);

}
Que errores hay en este code?

En fin, ya se que necesitaria un curso, por q con el manual no me entero del todo bien... Por ej con el uso de punteros... Yo empece leyendo acerca de punteros y comprendiendo lo basico ( o por lo menos eso creo). Lei que los punteros son una variable mas, con una direccion de memoria propia, en la que almacena otra direccion de memoria (1 byte), y la direccion de memoria q almacena contiene el valor del tipo al que apunta el puntero. De manera q si tu pones esto "int *p=3". p seria un puntero q almacenaria la direccion de memoria del int 3, y poniendo esto "*p", me estaria refiriendo al valor al q apunta el puntero, al 3. Y si pongo esto, "p", me estaria refiriendo a la direccion de memoria donde esta almacenado el puntero. Pues, es lo q yo entendi mas o menos, y a partir de ahi intento entender lo demas, y algunas cosas me resultan incoherentes, y no las entiendo... En fin, pues seguire estudiando... ya q aora me tocaba punteros.. los arrays ya los vi ...

Saludos.
  #9 (permalink)  
Antiguo 12/08/2006, 18:11
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años, 7 meses
Puntos: 0
hola de nuevo... va:

1.- Si, puede cambiar el valor de refencia.
2.- Las cademas son arreglos de caracteres, entonces, el puntero a la cadena se utiliza como variable de arreglo. ¿Como?, te haria bien investigarlo, lo necesitas.
3.- Quien te halla dicho que no se puede seguramente no se explico bien o no lo entedistes o no sabe, los punteros son validos en cualquie lugar que lo seria una variable.
4.-...
Podris es evitar utilizas esas contraciones pk dificultan mucho la lectura (almenos no las revualvas con el codigo, por si solo ya es difici comprender), es pecialmente si no se save sis es una variable o una avreviatura.
__________________
-> La duda adecuada es un buen comienzo <-
  #10 (permalink)  
Antiguo 13/08/2006, 03:08
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
desrreferenciar, es la caracteristica de un puntero para poder acceder al valor de la memoria (variable) apuntada.


a un puntero le puedes asignar un array;
en este caso el puntero guardaria la direccion del primer indice delarray(el inicio del array.


te comente que esa son las diferencias entre un puntero y una variable.

tal vez pienses , que ademas un puntero guarda una direccion de memoria.

pero te dire que una variable tambien lo puede hacer.

un ejemplo;(esta en C++).

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int var = 100; //declara una variable int con valor 100.
int *ptr = &var; //ptr guarda la direccion de var.
int nptr = (int)&var;//nptr tambien guarda la direccion de var
cout << (int)ptr << endl;//imprimo la direccion de var
cout << nptr << endl;//imprimo la direccion de var.
//ahora como te comente solo un puntero se puedes desrreferenciar.
cout << *ptr << endl;//desrreferenciamos para obtener el valor de var.
cout << (*(int*)nptr) << endl;//para obtener el valor de var primero tengo que convertir un int a un int* y despues hacemos desrreferencia.
cin.get();

system("PAUSE");
return EXIT_SUCCESS;
}

ahora con los arrays.

otro ejemplo:

int main(int argc, char *argv[])
{

int array[20]; //declaramos un array
int *ptr = array; //asignamos la direccion de inicio del array a ptr.
int nptr = (int)array;//hacemos lo mismo solo que ahora es un int.

cout << (int)ptr << endl;//imprimo las direcciones de memoria.
cout << nptr << endl;//se hace lo mismo.

ptr[0] = 100;//aqui esta la diferencia entre un puntero y una variable. el puntero se puede usar como si fuese un array.
cout << ptr[0] << endl;

((int*)nptr)[0] = 200;//para que una variable funcione como un array se tienen que convertir a puntero.
cout << ptr[0] << endl;
cin.get();

system("PAUSE");
return EXIT_SUCCESS;
}

bueneo en si ese el el funcionamiento y caracteristicas basicas de un puntero.

cuando te menciono lo de usar o no punteros en tu funcion, lo hago una vez aclarado que no se para que la usas, y yo supuse que para sumar dos caracteres.
se ser asi, no es necesario usarlos, no por que no se pueda o sea malo, sino por que no tienen caso.

a menos como te explico en uno de los ejemplos, que quieras que una variable externa a la funcion sea modificada.

los punteros como parametros tienen 2 propositos.

pasar parametros por rreferncia y pasar un array como parametro, este podria ser una cadena(array de caracteres).

si ninguno de estos es tu proposito es mejor usar parametros por valor.

malloc,es una funcion que recerva memoria y retorna un puntero que guarda la direccion de la memoria recervada.

la cantidad de memoria a recervar se indica en bytes o caracteres(char).

preguntas especificamente esto.

char* a = (char*)malloc(1);

lo que hago es recervar memoria para un caracter y asigno esta memoria al puntero a.
entonces el puntero a, ya tienen una memoria valida.
es muy similar a hacer.

char var;
char* a = &var;

solo que con malloc se hace dinamicamente.

y si, malloc tambien se usa para cadenas y arrays.

ejemplo;

char* cadena = (char*)malloc(20);
cadena es un array de 20 caracteres.

es muy similar a :

char array[20];
char* cadena = array;



bueno por hoy es todo.
  #11 (permalink)  
Antiguo 13/08/2006, 05:08
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
novato, hazles caso y empieza a leer por el principio el manual / tutorial / libro de C que tengas.

No has asimilado aún el ABC (tipos, funciones, parámetros) y estás atacando problemas que no alcanzas.

Supongo que eres autodidacta y lo estudias por hobby. Si es así, bienvenido, pero este no es el mejor lugar para aprender: Lee los manuales una y otra vez, y trata de no preguntar aquí.

Además, aquí la mayoría de la gente no tiene la capacidad de responderte adecuadamente, salvo unos pocos que te conviene distinguir ;)
  #12 (permalink)  
Antiguo 13/08/2006, 13:47
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
He intentado aplicar lo q me enseñaste haciendo un hay cosas q no me funcionan.

Código:
#include<stdio.h> 
#include<stdlib.h>
#include<iostream.h>
void main()
{

char* d=(char*)malloc(sizeof(char)*8);
*d="ola";

cout<<"es"<<*d;
}
En este por ej, no me imprime la cadena "ola". No se puede utilizar asi un puntero? Hay que meter antes la cadena "Ola" en un array?

O en este otro.

Código:
#include<stdio.h> 
#include<stdlib.h>
#include<iostream.h>
void main()
{

char* d=(char*)malloc(sizeof(char)*8);
char cad[10]="ola";
d=cad; //guardamos en el puntero d la direc. de memoria del primer elem. del //array

cout<<*d;//imprimimos la cadena
getchar();

}
SI lo pongo asi, me devuelve solo el primer caracter de ola. O tb cuando hago:

char* d=(char*)malloc(sizeof(char)*8);
gets(d);

cout<<"es"<<*d;

Tb me devuelve el 1 caracter. Sin embargo cuando pongo "cout<<d" me devuelve la cadena entera.(en este ultimo me sigue devolviendo solo un caracter). Lo q no entiendo es por se pone entonces cout<<p; si p es una direccion de memoria, no el valor de la direccion de memoria a la k apunta el puntero.

Y este otro englobando funciones y punteros, como puse al principio, pero mejorado, bueno mejorado es un decir, pero al menos lo intente xD.

Código:
#include<stdio.h> 
#include<stdlib.h>
char funcion(char *e);
void main()
{
char cad[10];
gets(cad);

printf("es %c",funcion(&c); 
}

funcion(char *e)
{

char* j=(char*) malloc(sizeof(char)*10);
char cad2[10]="xxx";
j= strcat(e,cad2);
return *j;
}
Trato de imprimir el valor de la cadena q apunta el puntero de retorno de la funcion. "printf("es %d",funcion(&c,&d); " Se llama asi a la funcion? En la funcion trato de sumar las 2 cadenas.

Saludos.
  #13 (permalink)  
Antiguo 13/08/2006, 22:36
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
pues eso. ya te digo.

tienes que leer un poco mas, practivar los ejemplos de tu manual y experimentar, un poco.

al respecto solo comentare que:
int ptr* ptr;

ptr se rrefieren e a la direccion almacenada
*ptr se refiere al valor almacenado en la direccion apuntada.(desrreferencia)

cuando un puntero maneja como un array se usa en sin desrreferenciar.

Saludos.
  #14 (permalink)  
Antiguo 15/08/2006, 21:15
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Ok. He puesto algunas cosas interesantes sobre punteros en las FAQs, porque no vas a checarlas, posiblemente te sirvan de algo.

Saludos
  #15 (permalink)  
Antiguo 16/08/2006, 08:11
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
Instru, ya lei las FAQs y tengo una pregunta sobre un cod:
Código:
int *funcion(void)
{
int *valor;
valor=(int *)malloc(sizeof(int));
//Calculo de valor
return valor;
}
Que significa esta forma de definir la funcion?¿ Por un parte pone q retorna un entero (int) y por otra parte q no retorna nada (void), no lo entiendo.

Y la otra pregunta sobre este cod.. POrke se define la funcion como un puntero "int *funcion(void)"?¿ Como se supone k se llama a la funcion si esta es un puntero?¿

Saludos.
  #16 (permalink)  
Antiguo 16/08/2006, 16:05
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Cita:
Que significa esta forma de definir la funcion?¿ Por un parte pone q retorna un entero (int) y por otra parte q no retorna nada (void), no lo entiendo.
Ok, primero hay que aprender la estructura de una funcion:

retorno funcion(argumento);

retorno es lo que devuelve la funcion, esto puede ser un int, char, float, una estructura, un puntero, etc. Argumento es la informacion que le das a la funcion. Si le pones un void, es que no va a tener ningun argumento.

Ahora:

int *funcion(...);

Significa que la funcion va a regresar un puntero de tipo int, osea, una direccion, no un valor.

Te recomiendo que sigas estudiando las funciones ANTES que te metas muy a fondo con los punteros ya que este temas de los punteros es complicado y es la cumbre de C mientras que las funciones son lo basico.

Si estas leyendo un libro o tutorial, te recomendaria que lo complementaras con el excelente tutorial de c y c++ con clase:www.conclase.com.

Cualquier duda aqui estamos.

Saludos
  #17 (permalink)  
Antiguo 16/08/2006, 18:00
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 18 años, 5 meses
Puntos: 0
ok. Pero si por ej en vez de :

"return valor;" pones "return *valor", t devolvera el valor al k apunta el puntero no?¿

Y otra cosa, cuando pasas punteros a una funcion, no puedes acerlo asi?¿

funcion(*p), tienes k acerlo asi funcion(&p)?¿? porke?¿

No os preguntare asta entro d un tiempo, pq me voi de vacac. una semanita :P.

Saludos.
  #18 (permalink)  
Antiguo 17/08/2006, 18:29
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Cita:
ok. Pero si por ej en vez de :

"return valor;" pones "return *valor", t devolvera el valor al k apunta el puntero no?¿
Simple. return valor; te regresaria la direccion(lo que la funcion debe regresar por el int *funcion). return *valor; te regresa el valor, no la direccion, y pues esto es un errorsote ya que la funcion DEBE regresar punteros y no valore y si tu regresas un valor, este valor se usara como una direccion que lo ams seguro es que no ese "apartada" y puedas caer en uno de los errores de desbordamiento explicado en la faq.


Cita:
Y otra cosa, cuando pasas punteros a una funcion, no puedes acerlo asi?¿

funcion(*p), tienes k acerlo asi funcion(&p)?¿? porke?¿

No os preguntare asta entro d un tiempo, pq me voi de vacac. una semanita :P.
Al llamar la funcion "funcion(*p)" asi como tal, lo que estas poniendo como argumento es el valor, no la direccion, y si la funcion toma este argumento como direccion, vuelves a cae en el mismo problema de usar memoria "no apartada". Todo esto siempre y cuando p sea un puntero ya que si es una variable comun, pues *p no tiene sentido y posiblemente te daria un error de compilacion.

funcion(&p) lo que hace es darle a la funcion la direccion, no el valor p. Y como la funcion pide una direccion, pues esto es correcto.

Un consejo para cuando regreses, estudia mas lo basico antes de irte a los punteros, en serio.

Saludos
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 18:26.