sirven que punteros puntero parametros para operaciones los funciones ejemplos con como cadenas arreglos c++ reference

c++ - que - punteros en c ejemplos



¿Por qué no funciona una referencia a una matriz hasta que usemos un puntero? (3)

Agregando a lo que ya ha sido respondido, puede obtener una referencia a una matriz como

int a[5]; int (&ref)[5] = a;

Vivir

Esto funciona muy bien ...

int a[5] = {1,2,3,4,5}, int *p = a; int *& ref = p;

Pero, ¿por qué esto no funciona?

int a[5] = {1,2,3,4,5}; int*& ref = a;

Tanto a como p son punteros y tienen el mismo valor (dirección de a[0] ). Cuando hago referencia a una matriz con un puntero ( p ), funciona muy bien.

Pero cuando hago referencia a esa matriz a[] directamente, no funciona ... ¿Por qué?


int*& ref = a;

int* es un tipo de puntero, no un tipo de matriz. Por lo tanto, es por eso que no se unirá a a , que tiene tipo int[5] .

Entonces, usa const

int* const& ref = a;

Funciona bien, ya que el nombre de la matriz es una constante de dirección, la referencia no constante no puede referirse a una constante.


a no es un puntero, es una matriz. Tiene el tipo int[5] . Lo que puede hacer es decaer a un puntero int* , que es lo que sucede en el primer caso. Entonces, tomar una referencia a p está bien.

Ahora para el segundo caso. Recuerde que a no es un puntero. Entonces, hay una conversión implícita pasando de int[5] a int* . El resultado de esa conversión es un valor prve. Pero no puede vincular una referencia de valor l no const (que es lo que ref ) a un valor r. Entonces el código no puede compilarse.

Aquí hay una analogía:

double a = 1.4; int& b = a; // implicit conversion from ''double'' to `int` results in prvalue // and you can''t bind non-const lvalue refs to rvalues.