elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] (Consulta) Mezclando punteros y arreglos.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] (Consulta) Mezclando punteros y arreglos.  (Leído 4,274 veces)
class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
[C] (Consulta) Mezclando punteros y arreglos.
« 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


En línea

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


Desconectado Desconectado

Mensajes: 1.061



Ver Perfil WWW
Re: [C] (Consulta) Mezclando punteros y arreglos.
« Respuesta #1 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?


En línea

Un byte a la izquierda.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C] (Consulta) Mezclando punteros y arreglos.
« Respuesta #2 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.
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: [C] (Consulta) Mezclando punteros y arreglos.
« Respuesta #3 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é
En línea

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


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: [C] (Consulta) Mezclando punteros y arreglos.
« Respuesta #4 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.
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: [C] (Consulta) Mezclando punteros y arreglos.
« Respuesta #5 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
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines