Punteros

Iniciado por Marsi, 29 Mayo 2020, 02:18 AM

0 Miembros y 1 Visitante están viendo este tema.

Marsi

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

EdePC

#1
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 (c,8) [Seleccionar]
/* 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. */

#include <stdio.h>

int main() {
  int numero = 1869898055; // "Gato" en decimal litle endian
  int *puntero = &numero;
  printf("Puntero - 1 = %p\n", puntero - 1);
  printf("Puntero     = %p\n", puntero);
  printf("Puntero + 1 = %p\n", puntero + 1);
  for (int i = 0; i < 4; i++) {
    printf("%c", *puntero);
    puntero += 1;
  }
  return 0;
}


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

Código (c,8) [Seleccionar]
/* 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. */

#include <stdio.h>

int main() {
  int numero = 1869898055; // "Gato" en decimal litle endian
  char *puntero = &numero;
  printf("Puntero - 1 = %p\n", puntero - 1);
  printf("Puntero     = %p\n", puntero);
  printf("Puntero + 1 = %p\n", puntero + 1);
  for (int i = 0; i < 4; i++) {
    printf("%c", *puntero);
    puntero += 1;
  }
  return 0;
}


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

K-YreX

Cita de: Marsi en 29 Mayo 2020, 02:18 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í:

void numberToString(int *number, char *string);
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.

Cita de: Marsi en 29 Mayo 2020, 02:18 AM
.-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
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;