Cargar un array de punteros
Hola, llevó unos días comiéndome la cabeza y no consigo cargar un array de punteros, ya he probado de varias formas, pero no sé donde está el problema, en la definición, en la carga o en la escritura del array, de todas formas aqui teneis el código fuente para ver si alguien sabe hacerlo. Gracias.
/* EJER5.CPP
Cargar una matriz y un vector. Diseñar un programa que diga al usuario si el vector es exacta-
mente igual a alguna de las filas de la matriz */
#include<stdio.h>
#include<conio.h>
#define n 10
void main()
{
int a, *pa, *pb[n], i, j, t, sw;
pa=&a;
char mas;
do{
sw=0;
clrscr();
printf("n Introduce el Nº de filas y colummas para la matriz y el vector: ");
scanf("%d", &t);
for(i=0;i<t;i++)
{
clrscr();
printf("n Introduce el valor para la posición del vector %d: ", i);
scanf("%d", pa+i);
}
for(i=0;i<t;i++)
for(j=0;j<t;j++)
{
clrscr();
printf("n Introduce el valor para la posición de la matriz (%d, %d): ", i, j);
scanf("%d", ((pb+i)+j));
}
for(i=0;i<t;i++)
for(j=0;j<t&&(*(pa+j)==*(*(pb+i)+j));j++)
if(j==t-1)
sw=j;
printf("nn ");
for(i=0;i<t;i++)
printf(" %d", *(pa+i));
printf("nn");
for(i=0;i<t;i++)
{
printf("n ");
for(j=0;j<t;j++)
printf(" %d", *(*(pb+i)+j));
}
if(sw>0)
printf("n El vector era igual que la fila %d de la matriz.", sw);
else
printf("n El vector no era igual que ninguna fila de la matriz.");
do{
printf("n ¿Quieres continuar?(S/N): ");
mas=getche();
}while(mas!='s'&&mas!='S'&&mas!='n'&&mas!='N');
}while(mas=='s'||mas=='S');
clrscr();
printf("FIN DEL PROGRAMA");
}
/* EJER5.CPP
Cargar una matriz y un vector. Diseñar un programa que diga al usuario si el vector es exacta-
mente igual a alguna de las filas de la matriz */
#include<stdio.h>
#include<conio.h>
#define n 10
void main()
{
int a, *pa, *pb[n], i, j, t, sw;
pa=&a;
char mas;
do{
sw=0;
clrscr();
printf("n Introduce el Nº de filas y colummas para la matriz y el vector: ");
scanf("%d", &t);
for(i=0;i<t;i++)
{
clrscr();
printf("n Introduce el valor para la posición del vector %d: ", i);
scanf("%d", pa+i);
}
for(i=0;i<t;i++)
for(j=0;j<t;j++)
{
clrscr();
printf("n Introduce el valor para la posición de la matriz (%d, %d): ", i, j);
scanf("%d", ((pb+i)+j));
}
for(i=0;i<t;i++)
for(j=0;j<t&&(*(pa+j)==*(*(pb+i)+j));j++)
if(j==t-1)
sw=j;
printf("nn ");
for(i=0;i<t;i++)
printf(" %d", *(pa+i));
printf("nn");
for(i=0;i<t;i++)
{
printf("n ");
for(j=0;j<t;j++)
printf(" %d", *(*(pb+i)+j));
}
if(sw>0)
printf("n El vector era igual que la fila %d de la matriz.", sw);
else
printf("n El vector no era igual que ninguna fila de la matriz.");
do{
printf("n ¿Quieres continuar?(S/N): ");
mas=getche();
}while(mas!='s'&&mas!='S'&&mas!='n'&&mas!='N');
}while(mas=='s'||mas=='S');
clrscr();
printf("FIN DEL PROGRAMA");
}
No se si me queda muy claro lo que quieres hacer.
Como quieres cargar el array de punteros, con punteros o con valores enteros (eso es lo que creo que quieres hacer).
si lo que quieres hacer es eso ultimo, date cuenta que no has reservado memoria dinamica para cada columna del array.
ademas el vector tampoco tiene memoria, madreeee.
A ver te cuento:
int *pa <== eso es un puntero
pa=&a <== haces que pa APUNTE a la direccion de a
Si quieres que pa se "convierta" en un vector haz esto pa=(int *)calloc(n_posiciones,sizeof(int).
Creo que el calloc iba asi, si no prueba con pa=(int *)malloc(n_posiciones*sizeof(int));
Para la matriz, debes recorrerla e ir inicializando cada columna con el calloc o el malloc.
Luego que no se te olvide borrar la memoria con free.
Espero que sea esto lo q preguntabas, si no, pues avisa y veremos que se puede hacer
Como quieres cargar el array de punteros, con punteros o con valores enteros (eso es lo que creo que quieres hacer).
si lo que quieres hacer es eso ultimo, date cuenta que no has reservado memoria dinamica para cada columna del array.
ademas el vector tampoco tiene memoria, madreeee.
A ver te cuento:
int *pa <== eso es un puntero
pa=&a <== haces que pa APUNTE a la direccion de a
Si quieres que pa se "convierta" en un vector haz esto pa=(int *)calloc(n_posiciones,sizeof(int).
Creo que el calloc iba asi, si no prueba con pa=(int *)malloc(n_posiciones*sizeof(int));
Para la matriz, debes recorrerla e ir inicializando cada columna con el calloc o el malloc.
Luego que no se te olvide borrar la memoria con free.
Espero que sea esto lo q preguntabas, si no, pues avisa y veremos que se puede hacer
Hola, gracias por tu ayuda, pero me acaban de explicar como hacerlo. En lugar de declarar (*p)[n] se declara una tabla normal p[n][n] y luego ya se trabaja con punteros. Gracias por las molestias.
Lo que tu estas haciendo es una tabla ESTATICA de elementos, no le podras pedir al usuario que te diga el numero de celdas ya que debe ser conocida en momento de compilacion.
Lo que yo te explique es como hacerlo dinamicamente de forma que el usuario SI pueda elegir libremente el tamaño.
Suerte con tus dudas
Lo que yo te explique es como hacerlo dinamicamente de forma que el usuario SI pueda elegir libremente el tamaño.
Suerte con tus dudas
