Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Marsi en 29 Mayo 2020, 02:18 am



Título: Punteros
Publicado por: Marsi en 29 Mayo 2020, 02:18 am
Estoy estudiando punteros y no entiendo muy bien, alguien me puede decir como se realizan estos programas?

.-Realice un programa que tenga una función que mediante apuntadores pueda transformar un
número entero en una cadena de caracteres formada por los dígitos del número entero.

.-Empleando apuntadores escribir un programa que lea una línea de texto y escriba en pantalla
las palabras de que consta la línea sin utilizar las funciones de string.h y particularmente sin usar
strtok ().


Título: Re: Punteros
Publicado por: EdePC en 29 Mayo 2020, 02:30 am
Saludos,

- El tema de los punteros es un lío XD, yo no lo acabo de digerir completamente, cada vez que los necesito le echo una ojeada a este Paper: https://openlibra.com/es/book/introduccion-a-los-punteros-en-c al menos dándole un par de leídas y poniéndolo en práctica lo entiendo por un tiempo :xD



- Wow, yo pensé que los punteros eran simples direcciones de memoria, pero al parecer son rangos de direcciones de memoria donde el tamaño del rango es el tipo de variable.

- Estoy haciendo el siguiente experimento intentando sumarle +1 al puntero para que apunte al siguiente caracter pero no lo hace, este le suma +4 porque el tipo es int. Pero si lo hago con char me manda una advertencia el compilador:

Código
  1. /* Realice un programa que tenga una función que mediante apuntadores pueda transformar un
  2. número entero en una cadena de caracteres formada por los dígitos del número entero. */
  3.  
  4. #include <stdio.h>
  5.  
  6. int main() {
  7.  int numero = 1869898055; // "Gato" en decimal litle endian
  8.  int *puntero = &numero;
  9.  printf("Puntero - 1 = %p\n", puntero - 1);
  10.  printf("Puntero     = %p\n", puntero);
  11.  printf("Puntero + 1 = %p\n", puntero + 1);
  12.  for (int i = 0; i < 4; i++) {
  13.    printf("%c", *puntero);
  14.    puntero += 1;
  15.  }
  16.  return 0;
  17. }

Citar
C:\Users\EdSon\Desktop>gcc punteros.c -o punteros.exe && punteros.exe
Puntero - 1 = 0028FF20
Puntero     = 0028FF24
Puntero + 1 = 0028FF28
G☺,Ç

Código
  1. /* Realice un programa que tenga una función que mediante apuntadores pueda transformar un
  2. número entero en una cadena de caracteres formada por los dígitos del número entero. */
  3.  
  4. #include <stdio.h>
  5.  
  6. int main() {
  7.  int numero = 1869898055; // "Gato" en decimal litle endian
  8.  char *puntero = &numero;
  9.  printf("Puntero - 1 = %p\n", puntero - 1);
  10.  printf("Puntero     = %p\n", puntero);
  11.  printf("Puntero + 1 = %p\n", puntero + 1);
  12.  for (int i = 0; i < 4; i++) {
  13.    printf("%c", *puntero);
  14.    puntero += 1;
  15.  }
  16.  return 0;
  17. }

Citar

C:\Users\EdSon\Desktop>gcc punteros.c -o punteros.exe && punteros.exe
punteros.c: In function 'main':
punteros.c:8:19: warning: initialization of 'char *' from incompatible pointer type 'int *' [-Wincom
patible-pointer-types]
    8 |   char *puntero = &numero;
      |                   ^
Puntero - 1 = 0028FF23
Puntero     = 0028FF24
Puntero + 1 = 0028FF25
Gato


Título: Re: Punteros
Publicado por: K-YreX en 29 Mayo 2020, 08:30 am
.-Realice un programa que tenga una función que mediante apuntadores pueda transformar un
número entero en una cadena de caracteres formada por los dígitos del número entero.
Los punteros dan mucha libertad. Es muy difícil saber qué es lo que te están pidiendo exactamente pero yo creo que podría ser algo así:
Código
  1. void numberToString(int *number, char *string);
  2. char* numberToString(int *number);
En ambos casos es una función que recibe un entero por medio de un puntero, lo que sería el paso por referencia en C, y modifica (primer caso) o crea y devuelve (segundo caso) un puntero a una cadena en la que cada carácter es un dígito del número.

.-Empleando apuntadores escribir un programa que lea una línea de texto y escriba en pantalla
las palabras de que consta la línea sin utilizar las funciones de string.h y particularmente sin usar
strtok ().
En este caso quiero entender que tienes que separar cada una de las palabras leídas. Podrías guardar la línea de texto en una cadena unidimensional char[] e ir separando y mostrando alternativamente o, crear un array de cadenas char[][] y en cada fila guardar una de esas palabras.

Todo esto tiene bastante sentido si estás trabajando con memoria dinámica. Si no es así, también podrías hacerlo con memoria estática pero los punteros adquieren menos relevancia en este caso.

De todas formas, tienes que darnos más información sobre el problema. A ser posible con una breve explicación de lo que tú crees que tienes que hacer y cómo estás intentando hacerlo. Ya partimos luego de ahí para poder ayudarte mejor.

Suerte.  :-X