in

c – matriz char * y matriz char[]

apple touch icon@2

La declaración y la inicialización

char *array = "One good thing about music";

declara un puntero array y haz que apunte a una matriz constante de 31 caracteres.

La declaración y la inicialización

char array[] = "One, good, thing, about, music";

declara una matriz de caracteres, que contiene 31 caracteres.

Y sí, el tamaño de las matrices es 31, ya que incluye la terminación '' personaje.


Presentado en la memoria, será algo como esto para el primero:

+-------+     +------------------------------+
| array | --> | "One good thing about music" |
+-------+     +------------------------------+

Y así para el segundo:

+------------------------------+
| "One good thing about music" |
+------------------------------+

Las matrices se descomponen en punteros al primer elemento de una matriz. Si tienes una matriz como

char array[] = "One, good, thing, about, music";

luego usando simple array cuando se espera un puntero, es lo mismo que &array[0].

Eso significa que cuando, por ejemplo, pasa una matriz como argumento a una función, se pasará como un puntero.

Los punteros y las matrices son casi intercambiable. No puede, por ejemplo, usar sizeof(pointer) porque eso devuelve el tamaño del puntero real y no a lo que apunta. También cuando lo haces, por ejemplo &pointer obtienes la dirección del puntero, pero &array devuelve un puntero a la matriz. se debe notar que &array es muy diferente de array (o su equivalente &array[0]). Mientras tanto &array y &array[0] apuntan a la misma ubicación, los tipos son diferentes. Usando el arrat de arriba, &array es de tipo char (*)[31], tiempo &array[0] es de tipo char *.


Para más diversión: como muchos saben, es posible usar la indexación de matrices al acceder a un puntero. Pero debido a que las matrices decaen en punteros, es posible usar algo de aritmética de punteros con matrices.

Por ejemplo:

char array[] = "Foobar";  /* Declare an array of 7 characters */

Con lo anterior, puede acceder al cuarto elemento (el 'b‘personaje) usando

array[3]

o

*(array + 3)

Y porque la suma es conmutativo, el último también se puede expresar como

*(3 + array)

que conduce a la sintaxis divertida

3[array]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Java – método round ()

gfg 200x200 min

¿Cómo tomar la entrada de números enteros en Python?