(Consulta) Punteros a punteros en C

Iniciado por class_OpenGL, 19 Julio 2016, 11:18 AM

0 Miembros y 1 Visitante están viendo este tema.

class_OpenGL

Hola, muy buenas. Ante todo gracias por pasarlos, y por leer mi duda. El problema que tengo es con el siguiente código:

void funcion(const char * const * cadenas) {
cadenas = 0xFFFFFFFF;
}


Si yo compilo este código, no me dará un error como tal (simplemente una advertencia). Lo que me resulta raro es que si este código compila, significa que el último puntero es el que está tomando prioridad, porque el const opera sobre lo que tiene a su izquierda (a no ser que esté a la izquierda del todo, que en cuyo caso, opera sobre lo que tiene a la derecha). Es decir:

void funcion(const char * const * cadenas)
              ^


Este const opera sobre el char

void funcion(const char * const * cadenas)
                       ^   ^


Este const opera sobre el puntero señalado

Entones de esto deducimos que el único puntero no constante es el último. Al poder modificar en la función el valor del puntero dado, eso quiere decir que el último puntero es el que está tomando prioridad, mientras que debería tomar prioridad el primer puntero, es decir, este:

void funcion(const char * const * cadenas)
                       ^


La duda final podría ser: por lo visto no entiendo/sé muy bien las reglas de prioridad, porque yo creía que al ser el mismo operador (*), tenía prioridad el de más a la izquierda, pero según lo expuesto, y en este caso, tiene más prioridad el de más a la derecha...

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

class_OpenGL

Bueeno. Me responderé a mi mismo xD. Aunque haya dejado la pregunta aquí, tenía tanta curiosidad que seguí investigando. La respuesta la he descubierto aquí:
http://c.conclase.net/curso/index.php?cap=014#inicio

Lo que pasa es que el operador *, para declarar variables, es especial (como otros pocos). Lo que tiene de especial es que se evalúa de derecha a izquierda, y si hay varios operadores con la misma prioridad que el *, se evalúan de derecha a izquierda, por lo que, en efecto, el último asterisco tiene más prioridad que el primero, porque es el que está más a la derecha.

Sé que lo he explicado un poco mal, así que recomiendo ver la página que he puesto :D

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL