C++ Wskaznik i tablica.

0

Witam czy może ktoś powiedzieć czemu wskaznik wypisuje mi adresy a nie to na co pokazuje?

#include <iostream>
using namespace std;
int main()
{
	double *wsk;
	double tab[10];
	wsk = tab;
	for(int i = 0; i < 10; i++)
	{
		*(wsk++) = i * 2.54;
	}
	for(int i = 0; i < 10; i++)
	{
		cout << *(wsk++) << endl;
	}
	system("pause");
} 

A tak działa dobrze:

#include <iostream>
using namespace std;
int main()
{
	double *wsk;
	double tab[10];
	wsk = tab;
	for(int i = 0; i < 10; i++)
	{
		tab[i] = i * 2.54;
	}
	for(int i = 0; i < 10; i++)
	{
		cout << *(wsk++) << endl;
	}
	system("pause");
} 
0

Przecież ten wsk w czasie wypisywania pokazuje na jakiś kosmos...

0

Zobacz ten przyklad i przemyśl operatory ... a szczególnie ich "ważność", czyli który pierwszy ...

#include <iostream>
using namespace std;

int main(int argc, char **argv){
    
    int tab[2];
    int *w = tab;
    
    *(w) = 2;
    
    cout << tab[0] << endl;
    cout << *(w) << endl;
    
    w++;
    *(w) = 3;
    
    cout << tab[1] << endl;
    cout << *(w) << endl;
    
    cin.get();
    return 0;
}
0

Tu ważność operatorów nie ma znaczenia. Po prostu wypisuje od 10 do 19 elementu tablicy 10 elementowej...

0

Powinno być tak :

#include <iostream>
using namespace std;

int main(int argc, char **argv){
    
        double *wsk;
        double tab[10];
        wsk = tab;
        
        for(int i = 0; i < 10; i++)
            tab[i] = i * 2.54;
            
        for(int i = 0; i < 10; i++)
        {
         cout << *(wsk) << endl;
         wsk++;
        }
        
        cin.get();
        return 0;
}
0
byku_guzio napisał(a)

Tu ważność operatorów nie ma znaczenia. Po prostu wypisuje od 10 do 19 elementu tablicy 10 elementowej...

Jak to?
Przecież wsk = tab sprawia że wsk pokazuje na 0 element tablicy.
To *(wsk++) = i * 2.54
Nie powinno sprawiać że do elementu na który teraz pokazuje wskażnik wpisz i * 2.54 i przejdż do elementu dalej?

1

No dokładnie szczególnie istotne jest tu to "przejdź do elementu dalej". Wpisujesz do tablicy ok, ale po zakończeniu tego wpisywania wskaźnik jest 10 razy przesunięty i nigdzie nie wracasz z nim na początek tablicy. Po wypełnieniu tablicy wypisujesz tym wskaźnikiem, który aktualnie pokazuje poza nią.

#include <iostream>
using namespace std;
int main()
{
        double *wsk;
        double tab[10];
        wsk = tab;
        for(int i = 0; i < 10; i++)
        {
                *(wsk++) = i * 2.54;
        }

        wsk = tab; //<----------------------TU PROBLEM BYŁ I TO GO ROZWIĄZUJE ;)

        for(int i = 0; i < 10; i++)
        {
                cout << *(wsk++) << endl;
        }
        system("pause");
} 
0

Właśnie ;p
Dzięki wielkie.

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