Foro de elhacker.net

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:

Código
  1. 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:
Código
  1. source[0] = data;

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

Si que me da error. Más concretamente, el siguiente error:
Código:
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...

Código
  1. GLchar *(source[1]);
  2. 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
Hola, muy buenas. Para entender la duda, primero hay que mirar el trozo de código:

Código
  1. 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:
Código
  1. source[0] = data;

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

Si que me da error. Más concretamente, el siguiente error:
Código:
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

Código
  1. GLchar *(source[1]);
  2. GLchar *source[1];
  3. 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.
Código
  1. int **var[10][4][3];
  2. 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.
Código
  1. char* vertexShader;
  2. 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