Δημοσιεύτηκε: 09 Ιουν 2010, 21:21
από idomeneas
elefher έγραψε:καλησπέρα παιδιά θα ήθελα να κάνω μία ερώτησει στο παρακάτω πρόγραμμα που είναι για τον υπολογισμό μέσης τιμής ενός πίνακα.
Κώδικας: Επιλογή όλων
//ipologismoi metriseon
#include<stdio.h>

#define N 8

float meso_mikos(float* x);

int main()
{
float metrisis[N]={10.3,10.7,9.6,11.1,10.9,9.7,10.1,9.9};

printf("To meso mikos tou antikimmenou inai : %.4f cm\n",meso_mikos(metrisis));
return 0;
}
//sinartisi gia ipologismo mesou mikous
float meso_mikos(float* x)
{
float meso=0;
int i;
for(i=0;i<N;i++)
{
meso+=*x++; //prossthesi ton stixion tou pinaka
}
return meso/N;
}

Το πρόγραμμα τρέχει κανονικά.Αυτο που θα ήθελα να μάθω είναι αφού διοχετεύω στη συνάρτησει έναν πίνακα και θέλω να χρησημοποιήσω δείκτες δεν θα έπρεπε να διοχετεύσω τι διεύθυνση του πίνακα (δηλ.στην printf(" xxxx%f ",meso_mikos(&metrisis));).Για ποιό λόγο όμως αυτό είναι λάθος όταν το κάνω?

Η διεύθυνση ενός πίνακα a[5] είναι η
Κώδικας: Επιλογή όλων
a ή &a[0]
Το πρόβλημα δεν είναι εκεί, αλλά στην προτεραιότητα τελεστών. Έχεις βάλει
Κώδικας: Επιλογή όλων
for(i=0;i<N;i++)
{
meso+=*x++; //prossthesi ton stixion tou pinaka
}
ενώ θα έπρεπε να βάλεις
Κώδικας: Επιλογή όλων
for(i=0;i<N;i++)
{
meso+=*(x+i); //prossthesi ton stixion tou pinaka
}
ή
Κώδικας: Επιλογή όλων
meso += x[i]
Πρώτα να αυξήσει και μετά να αθροίσει στην τιμή που θες να πάρεις (meso).