Mnożenie wskaźników - o co kaman?

0

Witam,
podczas studiowania jednej lektury (może to ma znaczenie: z 1993 roku) dot. C++ natknąłem się na podobny kod funkcji:

double funkcja(int n, double *vec1, double vec2)
   {
   int k;
   k = n/4;
   double sum;
   while(k--)
      {
      sum += *vec1 **vec2; //<- o co chodzi z tym podwójnym mnożeniem/mnożeniem wskaźników?!?
      sum += *(vec1+1) **(vec2+1); //j.w.
      sum += *(vec1+2) **(vec2+2); //j.w.
      sum += *(vec1+3) **(vec2+3); //j.w.
      vec1 += 4;
      vec2 +=4;
      }
//... pozostała część kodu
   }

Celem tej funkcji jest obliczenie iloczyny skalarnego.

No i tak jak w komentarzu o co chodzi z tymi gwiazdkami?!? Uczyć programować uczę się od niedawna ale z tego co pamiętam zabronione są operacje na wskaźnikach (poza dodawaniem?)
Do tego vec2 nie jest wskaźnikiem!! (tylko zwykłą zmienną double?)
Czy mógłby mi ktoś wyjaśnić to przystępnie? będę bardzo zobowiązany!!!
Pozdrawiam i z góry dziękuję

0

Źle przepisałeś. Powinno być :

double funkcja(int n, double *vec1, double *vec2)

na 100%.
Unarny operator * dla wskaźników to operator dereferencji, który wyciąga wartość z miejsca w pamięci na które pokazuje wskaźnik. Toteż masz tam wszędzie operacje na liczbach a nie na wskaźnikach.

0
Shalom napisał(a)

Źle przepisałeś. Powinno być :

double funkcja(int n, double *vec1, double *vec2)

Tzn. że jest błąd w książce bo ja przepisałem dobrze :)

Shalom napisał(a)

Unarny operator * dla wskaźników to operator dereferencji, który wyciąga wartość z miejsca w pamięci na które pokazuje wskaźnik. Toteż masz tam wszędzie operacje na liczbach a nie na wskaźnikach.

aha :) czyli coś mi się pomieszało z adresem pamięci :P

A mogę prosić jeszcze o potwierdzeniem, że zapis typu:

while(m--)
   sum += *vec1++**vec2++; 

jest równoznaczny z tym:

while(m--){
   *vec1 = *vec1+1;
   *vec2 = *vec2+1;
   sum += *vec1**vec2;

?
Strasznie to poplątane :(
Pozdrawiam i dziękuję

1 użytkowników online, w tym zalogowanych: 0, gości: 1