[C] (Consulta) Mezclando punteros y arreglos.

Iniciado por class_OpenGL, 16 Mayo 2016, 09:42 AM

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

class_OpenGL

Hola, muy buenas. Para entender la duda, primero hay que mirar el trozo de código:

GLchar *(source[1]);

La duda que se me presenta es: ¿por qué la variable 'source' es un arreglo a punteros?

Digo por qué afirmo esto:
Si hago la siguiente asignación con el código de antes no me da error:
source[0] = data;

Pero si hago esta asigación con la variable creada con
GLchar (*source)[1];

Si que me da error. Más concretamente, el siguiente error:
error: assignment to expression with array type source[0] = data;

Les agradezco su ayuda. Estoy trabajando en C y a veces es un lío xD

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

fary

La pregunta es...

GLchar *(source[1]);
GLchar (*source)[1];


¿Qué sentido tiene esto?

Es decir... ¿Intentas declarar una variable que ya esta declarada? ¿Quiéres cambiar de tipo esa variable?
Un byte a la izquierda.

ivancea96

Cita de: class_OpenGL en 16 Mayo 2016, 09:42 AM
Hola, muy buenas. Para entender la duda, primero hay que mirar el trozo de código:

GLchar *(source[1]);

La duda que se me presenta es: ¿por qué la variable 'source' es un arreglo a punteros?

Digo por qué afirmo esto:
Si hago la siguiente asignación con el código de antes no me da error:
source[0] = data;

Pero si hago esta asigación con la variable creada con
GLchar (*source)[1];

Si que me da error. Más concretamente, el siguiente error:
error: assignment to expression with array type source[0] = data;

Les agradezco su ayuda. Estoy trabajando en C y a veces es un lío xD

GLchar *(source[1]);
GLchar *source[1];
GLchar* source[1];

Esos 2 son lo mismo. Un array de 1 puntero a GLchar.

El otro, pues como tiene el paréntesis, se evalua al revés, primero es un puntero, y luego array. Puntero a array.
Como detalle, para saber qué va primero, si array o puntero, se evalúa en este orden: paréntesis, derecha, izquierda, siempre de dentro hacia fuera.
int **var[10][4][3];
int 54var123;

Así que 'var' será: array10 de array4 de array3 de puntero a puntero a int.

class_OpenGL

Cierto, no me acordaba de la precedencia... xD

fary. Hay una función de OpenGL llamada glShaderSource que me pide este tipo de parámetro, y por alguna razón, al castear una variable tipo char * directamente, el programa me crashea... Esa es la solución más sencilla que encontré

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

ivancea96

Pasarle directamente un char** debería funcionar para esa función.
char* vertexShader;
glShaderSource(shaderId, 1, &vertexShader, 0);


Lo otro parece un poco forzado.

class_OpenGL

No puede ser... SE ME OLVIDÓ EL AMPERSAND... No me lo puedo creer... Aquí está la prueba de que programar dormido nunca es bueno XDD

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