Pytanie dotyczące wskaźników - C

Pytanie dotyczące wskaźników - C
mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Mam taki kod:

Kopiuj
 // Program 4 (przekazywanie tablicy 3-wymiarowej do funkcji za pomocą wskaźnika do pierwszego elementu)
#include <stdio.h>
void wczytaj(int *, int ile);
void wypisz(int *, int ile);
int i, j, k;
int main()
{
	int tab[2][2][2];
	int *ptr = &tab[0][0][0];
	wczytaj(ptr, 2);
	printf("\n\n");
	wypisz(ptr, 2);
	getchar();
	return 1;
}

void wczytaj(int *wsk, int ile)
{
for (i=0; i< ile; i++)
	for (j=0; j< ile; j++)
		for (k=0; k< ile; k++)
		{
			printf("tab[%d][%d][%d]=", i, j, k);
			scanf("%d", wsk);
			printf("tab[%d][%d][%d]=", i, j, k);
            printf("%d\n", *wsk++);
		}
}

void wypisz(int *wsk, int ile)
{
for (i=0; i< ile; i++)
	for (j=0; j< ile; j++)
		for (k=0; k< ile; k++)
		{
			printf("tab[%d][%d][%d]=", i, j, k);
			printf("%d\n", *wsk++);
		}
}

Chciałem się zapytać czemu zwiększana jest wartość tego wyrażenia w tym wypisywaniu: "printf("%d\n", *wsk++);" Gdy usunę inkrementację i zostawię samo *wsk to wyskakują mi dziwne wartości. Nie mogę dojść do tego jaki to ma wpływ na program? Skoro to tylko wypisuje wartości, to nie powinno nic psuć.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Guzik a nie tylko wypisuje. Oprócz wypisywania PRZESUWA wskaźnik. Jak usuniesz ++ z wczytaj() to wszystkie scanfy bedą ładować wartości w to samo miejsce (ergo tylko ostatnia liczb się zapisze). A potem próbujesz odczytać wartości przeswając wskaźnik i odczytujesz śmieci.
Jeśli usuniesz ++ z wypisz() to wypisze ci tylko pierwszą liczbę wielokrotnie

mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Tak też myślałem, że wielokrotnie to samo wypisze, ale po zmodyfikowaniu wyświetlało jedynie jakieś dziwne liczby. Czyli on jakby przesuwa adres w tablicy do której jest ten wskaźnik? Tzn. wyświetla wartości spod kolejnych adresów w tablicy. Dobrze myślę?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Tak. Początkowo ustawiasz wskaźnik na element tab[0][0] i każde wsk++ przesuwa go o jedna pozycję dalej.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.