Si la expresión type name[count]
está escrita en alguna función, le dice al compilador de C que asigne en el marco de pila sizeof(type)*count
bytes y calcule la dirección del primer elemento de la matriz.
Si la expresión type name[count]
se escribe fuera de todas las funciones y definiciones de estructuras, entonces le indica al compilador de C que asigne el segmento de datos sizeof(type)*count
bytes y calcule la dirección del primer elemento de la matriz.
name
en realidad es un objeto constante que almacena la dirección del primer elemento en la matriz y cada objeto que almacena una dirección de alguna memoria se llama puntero, por lo que esta es la razón por la que trata a name
como un puntero en lugar de una matriz. Tenga en cuenta que solo se puede acceder a las matrices en C a través de los punteros.
Si count
es una expresión constante que se evalúa en cero, entonces le indica al compilador de C que asigne cero bytes en el marco de la pila o en el segmento de datos y devuelva la dirección del primer elemento de la matriz, pero el problema está en hacer esto es que el primer elemento de la matriz de longitud cero no existe y no puede calcular la dirección de algo que no existe.
Esto es racional que el elemento no. count+1
no existe en la matriz count
-length, por lo que esta es la razón por la que el compilador de C prohíbe definir una matriz de longitud cero como variable dentro y fuera de una función, porque cuál es el contenido de name
entonces ? ¿Qué dirección name
almacena exactamente?
Si p
es un puntero, la expresión p[n]
es equivalente a *(p + n)
Donde el asterisco * en la expresión correcta es una operación de desreferencia de puntero, lo que significa acceder a la memoria apuntada por p + n
o acceder a la memoria cuya dirección está almacenada en p + n
, donde p + n
es una expresión de puntero, se necesita La dirección de p
y agrega a esta dirección el número n
multiplica el tamaño del tipo del puntero p
.
¿Es posible agregar una dirección y un número?
Sí, es posible, porque la dirección es un entero sin signo comúnmente representado en notación hexadecimal.