Autor Tema: Error al imprimir un apuntador a un arreglo de enteros [Lenguaje C]  (Leído 4708 veces)

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
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
Abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Error al imprimir un apuntador a un arreglo de enteros [Lenguaje C]
« Respuesta #1 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!!

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
Re:Error al imprimir un apuntador a un arreglo de enteros [Lenguaje C]
« Respuesta #2 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
Abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".