Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pino1952 en 30 de Noviembre 2014, 18:41

Título: Error al imprimir un apuntador a un arreglo de enteros [Lenguaje C]
Publicado por: Pino1952 en 30 de Noviembre 2014, 18:41
Hola a todos.
Primero una pequeña aclaración, créanme que tengo toda la mañana consultando al maestro google y no puedo dar con la  solución.
El caso es que estoy en el capítulo punteros y cree un programita que dejo a continuación de un apuntador a un arreglo de 10 enteros, me parece que la manera de cargar los datos es correcta pero en lo que estoy lidiado es con imprimirlos.-

Código: [Seleccionar]
#include <stdio.h>

#define MAX 10

int main(void){
int *ptrVector[MAX], i;

for(i=0; i<MAX; i++){
*(ptrVector + i) = &i;
}

for(i=0; i<MAX; i++){
printf("%d ", *(ptrVector + i));
}


printf("\n\n Pulse una tecla para finalizar..."); getchar();
return 0;
}


Citar
C:\ProgramasNotepad\Punteros.c: In function 'main':
C:\ProgramasNotepad\Punteros.c:13:3: warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
   printf("%d ", *(ptrVector + i));
   ^

Es todo, espero que puedan ayudarme a encontrar la sintaxis correcta.-
Saludos.
Daniel
Título: Re:Error al imprimir un apuntador a un arreglo de enteros [Lenguaje C]
Publicado por: Mastermind en 30 de Noviembre 2014, 20:16
Hola, el trabajo con punteros es bastante lioso.

La declaración que haces int *ptrVector[MAX] no estoy seguro de que sea una declaración correcta. Estás creando un array de punteros.

Esta expresión creo que no tiene sentido: *(ptrVector + i)

Con el asterisco delante estás desreferenciando, pero ¿qué desreferencias con *(ptrVector + i)?

He probado este código que sí funciona aunque no sé si es lo que pretendías:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#define MAX 10

int main(void){

    int a[MAX];
int (*ptrVector)[MAX] = &a; //Referencia al primer elemento de a
int i;

for(i=0; i<MAX; i++){
(*ptrVector)[i] = i; //Desreferenciamos y asignamos valores
}

for(i=0; i<MAX; i++){
printf("%d ", (*ptrVector)[i]); //Desreferenciamos y leemos valores
}


printf("\n\n Pulse una tecla para finalizar..."); getchar();
return 0;
}


Saludos!!
Título: Re:Error al imprimir un apuntador a un arreglo de enteros [Lenguaje C]
Publicado por: Pino1952 en 01 de Diciembre 2014, 03:38
Hola Mastermind.
Muchas gracias por ocuparte y decirte que tu código funciona perfectamente, de cualquier manera expongo el mío que se asemeja un poco más a la manera que yo pretendía, hacer lo más posible  con notación de punteros.- 
Bueno a seguir leyendo, practicando y aprendiendo.-

Código: [Seleccionar]
#include <stdio.h>
#include<stdlib.h> 
#include<time.h>

#define MAX 10

int main(void){
int vector[MAX], *ptrVector = &vector[0], i, hora = time(NULL); 

srand(hora);

for(i=0; i<MAX; i++){
*(ptrVector + i) =  rand()% 100;
}

printf("\n\n ");
for(i=0; i<MAX; i++){
printf("%d ", *(ptrVector + i));
}

printf("\n\n Pulse una tecla para finalizar..."); getchar();
return 0;
}

Saludos.
Daniel