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

0

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

#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;
}
 
#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.

1

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

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:

   int *p;
   int t[4];
   int i;
   p=t;
   for (i=0;i<4;i++) p[i]=i;
   printf("%d",t[2]);
0

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

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

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

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

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