C++ referencia a la matriz
Frecuentes
Visto 716 veces
1
No puedo crear una referencia a un unsigned char
matriz z
dentro de myfunc()
. Lo he intentado de varias maneras, pero simplemente no puedo resolverlo. Este es mi intento más reciente:
int myfunc (int &y, unsigned char (&z)[2]);
int main(int argc, char *argv[]) {
int y = 1;
unsigned char z[2];
int x = myfunc(y, z[2]);
}
int myfunc(int &y, unsigned char (&z)[2]) {
y = 123;
z[0] = foo;
z[1] = bar;
return 456;
}
Recibo los siguientes errores:
error: in passing argument 2 of ‘int myfunc(int&, unsigned char (&)[2])’
para linea int myfunc (int &y, unsigned char (&z)[2]);
Y:
error: invalid initialization of reference of type ‘unsigned char (&)[2]’ from expression of type ‘unsigned char’
para linea int x = myfunc(y, x);
¿Cómo debo hacer referencia a la matriz en sí misma (y no a una matriz de referencias?)?
3 Respuestas
10
myfunc(y, z[2]);
La expresion z[2]
es de tipo unsigned char
(y se refiere a un elemento más allá del final de la matriz, por lo que es un comportamiento indefinido). Quieres hacer:
myfunc(y, z);
contestado el 03 de mayo de 12 a las 20:05
Gracias por la rápida respuesta :) - jwbensley
1
Estoy un poco confundido acerca de lo que estás tratando de hacer. En mi humilde opinión, tu firma debería ser int myfunc (int &y, unsigned char z[2])
.
Los arreglos no se pasan "por valor" (si quiere hacer eso, entonces usar un vector es la forma más fácil), y el valor predeterminado hace que su get_mac
función (que supongo que se suponía que era myfunc
) trabajar como desee (a menos que haya entendido mal su deseo).
La firma int myfunc (int &y, unsigned char (&z)[2])
sugiere que es posible que desee cambiar el valor de z
mismo en la persona que llama (no sólo elementos de z
), pero incluso la persona que llama no puede hacer eso (!), y obtendrá un error si lo intenta. Si quieres eso, usa un puntero real.
Aún así, is un uso legítimo para pasar la matriz por referencia usando la sintaxis en su ejemplo, que es hacer cumplir el tamaño de matriz declarado. Pero si solo estás aprendiendo, no creo que debas preocuparte por esto todavía.
contestado el 04 de mayo de 12 a las 02:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c++ char pass-by-reference or haz tu propia pregunta.
El uso de un vector hace que esto sea realmente fácil y, de lo contrario, es mucho mejor que las matrices sin formato. De todos modos, está llamando a su función al pasar un solo elemento. Use
z
no,z[2]
. - chrisEstoy tratando de aprender vectores junto con esto, ¿cómo lo haría más fácil? La única forma que veo para que esto funcione es hacer que la matriz esté definida globalmente, lo que, según tengo entendido, no es bueno. - jwbensley
Con un vector, tu firma sería:
int myfunc (int &y, std::vector<unsigned char> &z)
. Proporcionan la sintaxis que esperaría del uso de otros tipos de parámetros. - chris