Wskazniki - wczytywanie do tablicy.

0

Witam, mam kolejne pytanie dotyczace C - tym razem ucze sie o wskaznikach. Z tego co rozumiem - int *p jest wskaznikiem na typ int, poczatkowo niezainicjowanym. Czyli "p" zawiera jakis losowy adres w pamieci. Zeby przypisac inny adres, trzeba uzyc & - np. p = &a[0]. Wtedy "p" wskazuje na element zerowy tablicy "a". Czyli "p" to adres, a wartosc na ktora "p" wskazuje mozna uzyskac poprzez "*p" - printf("%d", *p);
W ponizszym przykladzie wczytywane sa liczby do tablicy, poprzez wskazniki. Dziwi mnie "scanf("%d", p)" - czy nie oznacza to, ze liczba ktora uzytkownik poda zostanie zapisana jako adres na ktory "p" bedzie wskazywac? Czy nie powinno sie wczytywac tak "scanf("%d", *p);"?

#include <stdio.h>
#define N 10

int main(void) {
	int a[N], *p;
	printf("enter %d numbers: ", N);
	for (p = a; p < a + N; p++)
		scanf("%d", p);

	printf("in reverse order: ");
	for (p = a + N - 1; p >= a; p--)
		printf(" %d", *p);
	printf("\n");
	return 0
}
1
  1. Zapoznaj się z inkrementacja bo jej nie rozumiesz: http://4programmers.net/Forum/1101404 jeżeli masz ten przykład w książce to jej autor też tego nie rozumie i bóg wie czego jeszcze.
  2. scanf wymaga podania adresu; *p to zmienna; &*p to adres tej zmiennej; można to skrócić do p
0

Hej, dzieki za szybka odpowiedz. Ok, rozumiem czemu "p" a nie "*p".

Czego dokladnie nie rozumiem o inkrementacji? Chodzi tylko o ta tymczasowa kopia czy o cos jeszcze? Przyklad jest z ksiazki "C programming - a modern approach 2nd edition" autorstwa jakiegos K. N. King. Czy w tym przykladzie uzycie postinkrementacji jest niepoprawne (pomijajac kwestie optymalizacji)?

0

Pod linkiem wszystko opisane, może oprócz tego że to: for (p = a; p < a + N; p++) jak i to: for (p = a; p < a + N; ++p) robią dokładnie to samo, z tym że w przypadku przejścia na C++ oraz przeróbka na iteratory spowoduje mniej więcej podwójny spadek wydajności (na samych pętlach). Poza tym jeżeli nawet ten projekt nigdy nie przejdzie na C++ to nauczysz rękę robić brzydkie rzeczy, a później wszędzie będziesz to robić w C++ z iteratorami itp.

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