Czemu taki zapis nie jest równoważny?

0

Witam.
Zgłębiania tajników wskaźników część dalsza.
Moje pytanie brzmi czemu te funkcje nie dają tego samego wyniku?

char *podziel1(char *ramka)//nie działa
{
	static char tab2[50];	 
		
	int ir=0;
	int ki=0;
	char *wsk=tab2;
   	
	*wsk=*ramka;
   	 wsk++;ramka++;
	*wsk=*ramka;


		return wsk;
}
char *podziel2(char *ramka)// działa
{
	static char tab2[50];	 
		
	int ir=0;
	int ki=0;
	char *wsk=tab2;
   	
	wsk[ir]=ramka[ki];
   	 ir++;ki++;
	wsk[ir]=ramka[ki];


		return wsk;
}
0

Dlatego, że zwracane wskaźniki wskazują na dwie różne tablice.

1

w 2 przypadku wsk pokazuje caly czas na poczatek tablicy. zapis wsk[int] nie zmienia wartosci przechowywanego przez wskaznik adresu, zwraca tylko "zmieniony" adres. Z kolei w 1 przepadku zmieniasz wartosc przechowywanego przez wskaznik adresu;

0

Teraz rozumiem dzięki!

0

A jak powinna wyglądać ta funkcja wykorzystująca same wskaźniki?
Tak ?:

char *podziel2(char *ramka)// działa
{
        static char tab2[50];         
 
        int ir=0;
        int ki=0;
        char *wsk=tab2;
 
 		*wsk=*ramka;
            wsk++;ramka++;
        *wsk=*ramka;

 
 wsk=tab2;
 
                return wsk;
}
	
1

przecież już Ci odpowiadałem raz

 
int *ptr = tab;
ptr++; //przesuwa wskaźnik (czyli musisz pamiętać że teraz jest na drugim elemencie zmiennej tab
 
int *ptr = tab;
*(ptr+1); //odczytuje (a nie przesuwa) wartość następna
ptr[1]; // to samo, odczytuje wartość następna

zrób sobie test (może tak łatwiej zrozumiesz) wklej sobie te dwa kody w maina (zrób także zmienna tab) i wyświetl ptr oraz *ptr i zobaczysz że będą różne wyniki adresu pamięci, a wartość będzie ta sama (najpierw wyświetl tą która nie przesuwa wskaźnika a później tą która przesuwa)

0

Wydaje mi się że już rozumiem. Właściwie to te pytania zadaje ponieważ napisałem pewną funkcje która nie działa jak powinna niestety nie poradzę sobie z nią sam. Może po prostu założę jeden watek jej poświęcony.
Dziękuje i pozdrawiam

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