He escrito esta sencilla secuencia de comandos para entender qué es una referencia, y me estoy atascando en la matriz de caracteres.Comprensión de la referencia de caracteres
int numbers[5] = {3, 6, 9, 12, 15};
for (int i = 0; i < 5; i++)
{
cout << numbers[i] << endl;
cout << &numbers[i] << endl;
}
cout << "--------------" << endl;
char letters[5] = {'a', 'b', 'c', 'd', 'e'};
for (int i = 0; i < 5; i++)
{
cout << letters[i] << endl;
cout << &letters[i] << endl;
}
y este es el resultado:
3
0xbffff958
6
0xbffff95c
9
0xbffff960
12
0xbffff964
15
0xbffff968
--------------
a
abcde
b
bcde
c
cde
d
de
e
Con la matriz int
, cuando uso &numbers[i]
, recibo un número extraño que es una posición de memoria. Esto esta bien; es exactamente lo que he entendido.
Pero con char
, no entiendo por qué tengo esta salida.
Estoy semi sorprendido de que la segunda parte no se rompa al infierno y viceversa, teniendo en cuenta que, en lo que dice el código, 'letters' no tiene nul-terminted. Pero entonces, UB significa que "cualquier cosa puede suceder, incluso el programa aparentemente funciona". – cHao
@cHao: algunos compiladores inicializan cero muchas cosas al compilar en modo de depuración. Tal vez OP fue "afortunado". –
Me sorprende que nadie haya mencionado esto todavía, pero esto no tiene nada que ver con las referencias. Usted está hablando de punteros. –