Pytanie dotyczące wskaźników - C

0

Mam taki kod:

 // 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ć.

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

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ę?

0

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

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