PDA

View Full Version : [C] Array e puntatori


Dark_Tranquillity
21-01-2004, 12:24
Allora ho questo programma che al momento della compilazione mi dà questo errore:

saxpy.c: In function `main':
saxpy.c:45: warning: passing arg 5 of `saxpy' from incompatible pointer type (l'ho segnata in blu)
saxpy.c: In function `saxpy':
saxpy.c:63: incompatible types in assignment(l'ho segnata in rosso)


Lo stesso procedimento funziona se al posto degli array ci sono variabili, quindi cosa c'è di diverso quando si hanno array??

#include <stdio.h>
#include <malloc.h>

/* PROTOTIPO FUNZIONE */
void saxpy(float *X, float *Y, float alfa, int n, float *Z);

/* PROGRAMMA CHIAMANTE*/
main()
{
/* DICHIARAZIONE VARIABILI */
float *X, *Y, *Z, alfa;
int i, c, j;
int n;

/* LETTURA ELEMENTI ARRAY */
printf("Inserire il numero di elementi n: ");
scanf("%d",&n);

/* LETTURA ALFA */
printf("Inserire il numero alfa: ");
scanf("%f",&alfa);

/* ALLOCAZIONE DINAMICA DELLA MEMORIA */
if(!(X = (float *)malloc(n*sizeof(float))))
abort();
if(!(Y = (float *)malloc(n*sizeof(float))))
abort();
if(!(Z = (float *)malloc(n*sizeof(float))))
abort();

/* LETTURA ELEMENTI ARRAY X */
printf("\n");
for (i=0; i<=n-1; i++){
printf("Inserire il valore dell'elemento X%d: ", c=i+1);
scanf("%f", &X[i]);
}

/* LETTURA ELEMENTI ARRAY Y */
printf("\n");
for (i=0; i<=n-1; i++){
printf("Inserire il valore dell'elemento Y%d: ", c=i+1);
scanf("%f", &Y[i]);
}

saxpy(X, Y, alfa, n, &Z);
for (i=0; i<=n-1; i++){
printf("%f\n", Z[i]);}
}

/****************** SPECIFICHE FUNZIONE *************************/
void saxpy(float *X, float *Y, float alfa, int n, float *Z)
{
int i;

for (i=0; i<=n-1; i++)
{
X[i] = X[i] + alfa * Y[i];
}
*Z = X;
}

ilsensine
21-01-2004, 12:29
saxpy(X, Y, alfa, n, &Z);

&Z è di tipo float **

*Z = X;

*Z è di tipo float, X è di tipo float *

Dark_Tranquillity
21-01-2004, 13:17
scusa non ho capito bene cosa dici, sono molto principiante in C :)
potresti essere + dettagliato

ilsensine
21-01-2004, 13:32
Ti ho solo spiegato il perché degli errori...

Dark_Tranquillity
21-01-2004, 14:22
risolto grazie :)