Czemu nie działa program na wskaźnikach innym sposobem?

0

Witam, chciałem spytać dlaczego program działa pierwszym sposobem a już w dwóch kolejnych pokazuje błędy.

I sposób:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    float wynik[10];
    float *wskaznik = &wynik;
    int i,n;
    for(i = 0,n = 1; i < 10; i++,n++)
    {
       *(wskaznik+i)  = 2 * (4 * n * n) / (2 * n - 1) * (2 * n + 1);
       printf("%5.1f\n",*(wskaznik+i));
    }
}
 

W II i III sposobie podam tylko linijki kodu tylko w tych których go zmodyfikowałem.
II sposób:

for(i = 0,n = 1; i < 10; i++,n++)
    {
       *(wskaznik++)  = 2 * (4 * n * n) / (2 * n - 1) * (2 * n + 1);
       printf("%5.1f\n",*(wskaznik));
    }

III sposób:

 for(i = 0,n = 1; i < 10; i++,n++)
    {
       wskaznik[i]  = 2 * (4 * n * n) / (2 * n - 1) * (2 * n + 1);
       printf("%5.1f\n",wskaznik[i]);
    }
1

Trzeci przykład też działa normalnie :)
W drugim zamień *(wskaznik++) na *(++wskaznik). Poczytaj o post i pre inkrementacji. Edit: Przenieś postinkrementację do printf
Generalnie post inkrementacja najpierw zwraca liczbę, potem zwiększa ją o jeden. Dodatkowo: dlatego wszędzie gdzie się da, najlepiej stosować preinkrementację, po prostu jest szybsza. Tak jak tutaj

 for(i = 0,n = 1; i < 10; i++,n++)

</del> for(i = 0,n = 1; i < 10; ++i,++n)

http://ideone.com/drdcCH

<b>Edit:</b> Aha, błąd jest taki:
```cpp
float *wskaznik = &wynik[0];

Albo

float *wskaznik = wynik; 

Iaczej żaden kod nie chciał mi się skompilować, a zapomniałem o tym pisząc post :D
Generalnie float tablica[] to jest ten sam typ co float* wskaznik.

//Jeszcze ze 100 razy zeedytuję ten post i w końcu napiszę to co chciałem... :/

0

nie rozumiem czemu II sposób ma nie działać. Przy postinkrementacji zaczyna od indeksu 0, a przecież chcę do indeksu 0 najpierw pisać pierwszy wynik.

0

Wiesz, masz trochę racji. Z tym tylko że wtedy modyfikujesz zerowy element, a wypisujesz pierwszy :) W moim kodzie jest więc mały błąd.
Powinieneś postinkrementować w printf

1
  1. jak najbardziej działa: http://ideone.com/WtRteh
printf("%5.1f\n", *(wskaznik-1));
0

dobra dzięki już wiem jaki błąd robiłem.

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