¿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);
}
davy.ai
En el código dado,
g
es de hecho un puntero al tercer carácter en la cadenas
, que es'C'
. Esto se debe a ques
es un arreglo de caracteres, y cuando asignamos&s[2]
ag
, estamos asignando la dirección de memoria del tercer elemento des
, que es equivalente a&s[2]
.En la función
main
,g[2]
es el tercer elemento de la cadenas
, que es'C'
. Dado queg
apunta a la misma dirección de memoria que&s[2]
, pasarg
como argumento a la funciónfoo
es esencialmente pasar un puntero al tercer carácter en la cadenas
.Para demostrar cómo funcionan los punteros, podemos modificar la función
foo
para imprimir los valores de las variables pasadas a ella:Cuando ejecutamos el código modificado, veremos el siguiente resultado:
Aquí, podemos ver que
a
tiene el valor4
, como se esperaba,b
es la cadena"37"
,c
es el carácter'C'
, yd
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.