Puede ser que conozcas un lenguaje orientado a objetos como Java o Python, y ahora estás aprendiendo el lenguaje C. La diferencia entre Java y C cuando se piensa en char board[3][3]
es que en C la variable board
se representa en la memoria como 9 caracteres en direcciones de memoria adyacentes. Al igual que:
board: 1 2 3 4 5 6 7 8 9
En C, &board
se obtiene la misma dirección de memoria como &board[0]
y &board[0][0]
.
En contraste con esto, en Java la variable podría ser declarado como char[][] board
y su representación en la memoria se vería conceptualmente como esto:
board: ptr(A) ptr(B) ptr(C)
A: 1 2 3
B: 4 5 6
C: 7 8 9
donde ptr(x)
apunta a la dirección de memoria de x
. Por lo tanto, en Java, board
apunta a una dirección de memoria diferente que board[0]
.
Dices En C, & junta se obtiene la misma dirección de memoria como & bordo [0] y & bordo [0] [0]. Pero puedo acceder al primer elemento solo a través de la placa [0] [0] (o) * placa [0] (o) ** placa. ¿¿Por que es esto entonces??
Aunque las expresiones &board
y &board[0]
y &board[0][0]
producen la misma dirección, el sistema de tipos del lenguaje C que le impide acceder al valor de char
. En un compilador de C, los tipos son (conceptualmente):
board: type char[3][3]
board[0]: type char[3]
board[0][0]: type char
Suponiendo una variable de tipo char
, podemos escribir:
char c;
c = board[0][0];
pero no pueden escribir:
char c;
c = board; // Error
c = board[0]; // Error
porque el tipo en el lado izquierdo es incompatible con el tipo en el lado derecho de la tarea.
Si está seguro de que una dirección apunta a un char
, se puede utilizar un tipo de reparto:
char c;
c = *(char*)board; // Works OK
c = *(char*)board[0]; // Works OK
La desventaja es que este tipo de moldes de tipo pueden dar lugar a errores de codificación.
Hola, gracias por su respuesta y entiendo parcialmente. ¿Puede proporcionar un sencillo programa de muestra que explique su comentario? Yo sería de gran ayuda. Gracias. – intex0075
@intex su pregunta * es * el programa de ejemplo simple que proporcionaría. –