Przypisanie tablicy do wskaźnika, jak to działa?

Przypisanie tablicy do wskaźnika, jak to działa?
KieGoWhoYaa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Witam, prosiłbym o wytłumaczenie co dzieje się w poniższych programach, z góry dziękuję za odpowiedź.

Kopiuj
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
	int *p,t[4],i;
	 p=t;
	 for (i=0;i<4;i++)
	 *(p+i)=i;
	 printf("%d",t[2]); 
	return 0;
}
 
Kopiuj
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
	int *p,t[4],i;
	 p=t;
	 for (i=0;i<4;i++)
	 *(p+i)=i-1;
	 printf("%d",t[2]); 
	return 0;
}
 

Wyniki to następująco 2 i 1. Z tego co ja zaobserwowałem to przy ostatnim przebiegu pętli i jest równe 3 więc (p+i) gdzie za p podstawiona jest tablica czyli t[0+3]=i lecz nie pasuje mi tutaj wartość wyświetlana w programie. Jak to w ogóle działa? Bo raczej nie tak jak to przedstawiłem.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Pomijając smrodek od inkrementacji: http://4programmers.net/Forum/1101404 ...
int *p,t[4],i; jest tym samym to:

Kopiuj
int *p;
int t[4];
int i;

*(p+i) jest tym samym co: *(i+p) co: i[p]co: p[i]
Czyli w sumie masz:

Kopiuj
   int *p;
   int t[4];
   int i;
   p=t;
   for (i=0;i<4;i++) p[i]=i;
   printf("%d",t[2]);
kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1405
0

Wynik tego programu jest nieprzewidywalny (jakby powiedział tropiciel UB)

Kopiuj
 for (i=0;i<4;i++)
     *(p+i)=i; 

tu wychodzisz poza tablicę nadpisując nie swoja pamięć.

KieGoWhoYaa
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

Dziękuję za odpowiedź :) Inkrementacja taka a nie ++i ponieważ nasz wykładowca bardzo lubi mieszać na egzaminie, zapisuje programy w skomplikowany sposób chcąc kogoś wprowadzić w błąd :D a kod z avka nawiązuje do bad luck briana

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.