es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer un puntero a una cadena completa en C?

Tengo el siguiente código y se supone que debo completar toda la función principal solo para demostrar cómo funcionan los punteros.
e es un entero de 4,
f es una matriz de los caracteres en el código,
g es un puntero a la cadena “ABC”.

Entendí bien cómo funcionan e y f, pero tengo curiosidad acerca de la variable g y si realmente es un puntero a la cadena s.

#include <stdio.h>

int foo(int a, char b[], char c, char *d)
{
}

int main(void)
{
  char s[] = {"ABC"};
  char *g = &s[2];
  int e = 4;
  char f[] = {'3', '7', '\0'};

 int y = foo(e, f, g[2], g);
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En el código dado, g es de hecho un puntero al tercer carácter en la cadena s, que es 'C'. Esto se debe a que s es un arreglo de caracteres, y cuando asignamos &s[2] a g, estamos asignando la dirección de memoria del tercer elemento de s, que es equivalente a &s[2].

    En la función main, g[2] es el tercer elemento de la cadena s, que es 'C'. Dado que g apunta a la misma dirección de memoria que &s[2], pasar g como argumento a la función foo es esencialmente pasar un puntero al tercer carácter en la cadena s.

    Para demostrar cómo funcionan los punteros, podemos modificar la función foo para imprimir los valores de las variables pasadas a ella:

    int foo(int a, char b[], char c, char *d)
    {
        printf("a: %d\nb: %s\nc: %c\nd: %s\n", a, b, c, d);
    }
    
    int main(void)
    {
        char s[] = {"ABC"};
        char *g = &s[2];
        int e = 4;
        char f[] = {'3', '7', '\0'};
    
        foo(e, f, g[2], g);
        return 0;
    }
    

    Cuando ejecutamos el código modificado, veremos el siguiente resultado:

    a: 4
    b: 37
    c: C
    d: C
    

    Aquí, podemos ver que a tiene el valor 4, como se esperaba, b es la cadena "37", c es el carácter 'C', y d es una cadena que contiene solo el carácter 'C'. Esto demuestra cómo los punteros pueden utilizarse para pasar direcciones de memoria como argumentos y acceder a los datos almacenados en diferentes partes de la memoria de un programa.

Comments are closed.