Δημοσιεύτηκε: 17 Μαρ 2012, 19:13
από Ilias95
Ας πούμε ότι θέλουμε να γράψουμε μια function με prototype:
Κώδικας: Επιλογή όλων
int inner_product(int a[], int b[], int n)

Οι a, b είναι arrays που θα έχουν τον ίδιο αριθμό στοιχείων.
Η συνάρτηση πρέπει να επιστρέφει το "a[0] * b[0] + a[1] * b[1] + ... a[n-1] * b[n-1]".


Αν την έγραφα χρησιμοποιώντας subscripting θα έγραφα κάτι τέτοιο:
Μορφοποιημένος Κώδικας: Επιλογή όλων
int inner_product1(int a[], int b[], int n)
{
int i, inner_product = 0;

for (i = 0; i < n; i++)
inner_product += a[i] * b[i];

return inner_product;
}


Αν απ' την άλλη αν έπρεπε να την γράψω χρησιμοποιώντας pointer arithmetic θα έγραφα κάτι σαν:
Μορφοποιημένος Κώδικας: Επιλογή όλων
int inner_product2(int a[], int b[], int n)
{
int *p, *q, inner_product = 0;

for (p = a, q = b; p < a + n; p++, q++)
inner_product += *p * *q;

return inner_product;
}

Στην τελευταία με προβληματίζει το ότι χρησιμοποιώ 2 pointers. Μπορεί να γραφεί αλλιώς;

Αν όχι, ποια απ' τις δύο συναρτήσεις θα εκτελεστεί πιο γρήγορα;