Δημοσιεύτηκε: 17 Μαρ 2012, 19:13
Ας πούμε ότι θέλουμε να γράψουμε μια function με prototype:
Οι a, b είναι arrays που θα έχουν τον ίδιο αριθμό στοιχείων.
Η συνάρτηση πρέπει να επιστρέφει το "a[0] * b[0] + a[1] * b[1] + ... a[n-1] * b[n-1]".
Αν την έγραφα χρησιμοποιώντας subscripting θα έγραφα κάτι τέτοιο:
Αν απ' την άλλη αν έπρεπε να την γράψω χρησιμοποιώντας pointer arithmetic θα έγραφα κάτι σαν:
Στην τελευταία με προβληματίζει το ότι χρησιμοποιώ 2 pointers. Μπορεί να γραφεί αλλιώς;
Αν όχι, ποια απ' τις δύο συναρτήσεις θα εκτελεστεί πιο γρήγορα;
- Κώδικας: Επιλογή όλων
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. Μπορεί να γραφεί αλλιώς;
Αν όχι, ποια απ' τις δύο συναρτήσεις θα εκτελεστεί πιο γρήγορα;