Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: class_OpenGL en 16 Mayo 2016, 09:42 AM

Título: [C] (Consulta) Mezclando punteros y arreglos.
Publicado por: 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
Título: Re: [C] (Consulta) Mezclando punteros y arreglos.
Publicado por: fary en 16 Mayo 2016, 09:58 AM
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?
Título: Re: [C] (Consulta) Mezclando punteros y arreglos.
Publicado por: ivancea96 en 16 Mayo 2016, 14:16 PM
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.
Título: Re: [C] (Consulta) Mezclando punteros y arreglos.
Publicado por: class_OpenGL en 16 Mayo 2016, 18:29 PM
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é
Título: Re: [C] (Consulta) Mezclando punteros y arreglos.
Publicado por: ivancea96 en 16 Mayo 2016, 18:49 PM
Pasarle directamente un char** debería funcionar para esa función.
char* vertexShader;
glShaderSource(shaderId, 1, &vertexShader, 0);


Lo otro parece un poco forzado.
Título: Re: [C] (Consulta) Mezclando punteros y arreglos.
Publicado por: class_OpenGL en 16 Mayo 2016, 18:51 PM
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