Czy ten kod:
int i = 4;
int *wsk = &i;
robi to samo, co ten:
int i = 4;
int *wsk;
wsk = &i;
?
Czy ten kod:
int i = 4;
int *wsk = &i;
robi to samo, co ten:
int i = 4;
int *wsk;
wsk = &i;
?
tak
Ok, dzięki. To jeszcze jedno:
int tab[] = {1,2,3,4};
int *wsk;
wsk = &tab[0];
czy to to samo, co:
int tab[] = {1,2,3,4};
int *wsk;
wsk = tab;
?
Nie jest to "to samo" ale efekt będzie taki sam.
@Shalom: mozesz wyjaśnić?
To nie jest to samo, bo w pierwszym przykładzie najpierw pobierasz pierwszy(zerowy) element tablicy i potem bierzesz na niego wskaźnik. W drugim bierzesz od razu wskaźnik na tablicę, który jest równy, co do wartości, wskaźnikowi na zerowy jej element. Wychodzi na to samo, z tą tylko różnicą że w pierwszym przykładzie "jest więcej akcji do wykonania". Chociaż kompilator i tak zapewne to uprości więc można z tego korzystać zamiennie.
Ok, to jeszcze jedno pytanie mam o tablice i wskaźniki:
Te 3 metody wyświetlają mi zawartość tablicy (sprawdzałem, działają), jednak czy na pewno robią to samo? Nigdzie nie przekroczę zakresu, wszystko jest ok:
for(i=0; i<3; i++)
printf("tab[i] = %d, ", tab[i]);
printf("\n");
for(i=0; i<3; i++)
printf("*(p++) = %d, ", *p++);
printf("\n");
for(i=0; i<3; i++)
printf("*(p+i) = %d, ", *(p+i));
printf("\n");
Nie do końca.
Środkowa psuje p
- więc kolejne odpalenie tego nie będzie poprawne.
Nie podałeś czym jest to twoje p
.
Jeśli tab i p to to samo, to tak, robią to samo.
To powinno byc właściwie tak:
int tab[] = {1,2,3};
int *p = tab;
potem, przed 3-cią pętlą:
p = tab;
teraz ok? :)