dziwne przypisanie

0
#include<stdio.h>

int main(void)
{
	char s[ ]="man";
	int i;
	for(i=0;s[ i ];i++)
	printf("\n%c%c%c%c",s[ i ],*(s+i),*(i+s),i[s]);
}

jakim cudem dostaję:

mmmm
aaaa
nnnn

Dziwię się ponieważ ostatni argument printf'a uznaje int i jako tablicę a przecież to s było zadeklarowane jako tablica to skąd i ma index?

0

nie wiem o co Ci chodzi bo piszesz dość chaotycznie, ale jeśli o ostatni argument printf (i[s]):

Jeśli piszesz w C++ (nie wygląda, ale różne rzeczy dzisiaj ludzie robią) - kompatybilność wsteczna z C.

Jeśli piszesz w C - masz to ładnie rozpisane w Twoim kodzie :>

char s[]; int i;
s[i]

czyli odwołanie do indeksu tablicy, to to samo co to (tak jest rozumiane przez kompilator)

char *s; int i;
s[i]

tzn. s jest wskaźnikiem.

Teraz, jest to równoważne takiemu zapisowi:

*(s + i)

Co jest oczywiście tym samym co:

*(i + s)

I teraz tadam: zmieniamy to w taki sam sposób jak za pierwszym razem (język na to pozwala, ponieważ notacja [] w C jest tylko lukrem składniowym dla arytmetyki wskaźników):

i[s]

Ot, taka ciekawostka, chociaż nie polecam stosowania w prawdziwym kodzie :>.

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