Título: lvalue required as left operand of assignment Publicado por: uhuru en 3 Mayo 2010, 06:48 am Hola. Estoy intentando usar un puntero de doble indirección (es la primera vez que lo uso), y me da un error (lvalue required as left operand of assignment).
Tengo 3 variables: num1, num2 y num3, de tipo int, luego 3 punteros *n1, *n2 y *n3 que apuntan a cada una de estas variables. Finalmente un puntero doble **numero que pretendo que apunte a cada uno de esos anteriores punteros. Copio las lineas en cuestión: Código
¿Alguien me puede explicar qué hago mal? Gracias. Título: Re: lvalue required as left operand of assignment Publicado por: do-while en 3 Mayo 2010, 07:06 am No lo he probado, pero...
Código: numeros + i = &numeros[i] --------> tipo int**, pero es la direccion de numeros[i], por lo que no puedes modifcarlo, ya que es la posicion de un elemento del vector. Por lo tanto: Código: *(numeros + i) = numeros[i] ----------> tipo int*, y se puede modificar, ya que el elemento i-esimo del vector es una variable de tipo int* Y tendras que hacer: Código
Espero que te sirva, si no es asi avisa. ¡Saludos! Título: Re: lvalue required as left operand of assignment Publicado por: Og. en 3 Mayo 2010, 07:09 am No lo he probado, pero... Código: numeros + i = &numeros[i] --------> tipo int**, pero es la direccion de numeros[0], por lo que no puedes modifcarlo, ya que es la posicion de un elemento del vector. Por lo tanto: Código: *(numeros + i) = numeros[i] ----------> tipo int*, y se puede modificar, ya que el elemento i-esimo del vector es una variable de tipo int* Y tendras que hacer: Código
Espero que te sirva, si no es asi avisa. ¡Saludos! nop, eso es hacer un arreglo de punteros, lo que el quiere hacer es un arreglo de punteros que apunten a punteros. por lo tanto: Código
Saludos! Título: Re: lvalue required as left operand of assignment Publicado por: do-while en 3 Mayo 2010, 07:12 am Cierto.
:-[ Eso me pasa por leer deprisa. :silbar: Solo un detalle: Código ¡Saludos! Título: Re: lvalue required as left operand of assignment Publicado por: uhuru en 3 Mayo 2010, 12:51 pm Ahora con lo que habéis dicho ya no me da ese error, pero no acabo de entender la necesidad de usar 3 asteriscos en lugar de 2. Yo solo quería un vector de punteros que apuntaran a un tipo int. ¿Eso no se puede con **?
Por otra parte, ¿cómo escanearía una posición luego? éste es el for dónde los pido: Código
Pero si ejecuto eso, después de introducir el 2º número, me peta el programa con: "segmentation fault" Gracias Título: Re: lvalue required as left operand of assignment Publicado por: biribau en 3 Mayo 2010, 14:35 pm El operador & sólo funciona con nombres, o con posiciones de array, no puedes hacer &*a, pero sí &a, puesto que no funciona con expresiones.
creo que lo que buscas es Código Recuerda que *numeros[i] es la direccion a un entero que es lo que necesita el scanf P.D.: Cómo puedo escapar corchetes en el mensaje? Corrijo, tenía un nivel de indireccion mas y te falta un * en el cast al retorno del malloc Título: Re: lvalue required as left operand of assignment Publicado por: Gallu en 3 Mayo 2010, 15:25 pm Título: Re: lvalue required as left operand of assignment Publicado por: Og. en 4 Mayo 2010, 01:39 am Cierto. realmente es lo mismo que si pones :-[ Eso me pasa por leer deprisa. :silbar: Solo un detalle: Código ¡Saludos! Código
debido a que en aspectos de memoria ocupa el mismo espacio un puntero que apunta a un puntero que un puntero que apunta a un entero. |