Wtam
Pisze w sprawie bardzo czesto pojawiajacej sie chyba na forach chodzi o wskazniki na wskaznik i dynamiczna alokacja pamieci w polaczeniu przejrzalem juz sporo mat ale gdzies tego nie kumam.
Mam do wykonania program który pobierze od użytkownika dany rozmiar tablicy, a następnie wykorzystując przygotowaną funkcję zarezerwuje pamięć na tablicę i pobierze od użytkownika dana liczbę danych.
prototyp :
int stworz(int **wsk, int N);
i teraz gdybym mial *wsk zamiast **wsk to zrobilbym to
wsk=malloc(N*sizeof(*wsk))
natomiast teraz jak mam wskaznik na wskaznik to nie bardzo wiem jak.Teroretycznie powinienem zadeklarowac
wsk=malloc(N* sizeof(*wsk));
for(int i=0;i<N;i++){
*(wsk+i) = malloc(sizeof(int));
}
tylko przeciez ja dostane tablice jednowymiarowa jak uzytkownik mi poda np 10 liczb to jak zadeklarowac dla kazdej tablicy kolejna tablice?Bo z tego co zrozumialem jesli chodzi o wskazniki na wskaznik to jesli bym mial tab[5][3] to
wsk=malloc(5* sizeof(*wsk));
for(int i=0;i<N;i++){
*(wsk+i) = malloc(3*sizeof(int));
}
I druga sprawa jesli chodzi o operowanie wskaznikami na wskazniki i rozumienie tematu bo nie lape
jak mialbym pojedynczy wskaznik np *(wsk+1) to najpierw przesunie wskaznik a potem operator wyluskania pobierze wartosc gdybym zrobil tak *wsk+1 to najpierw pobierze wartosc z adresu ktory przechowuje wskaznik a potem doda 1 bo operator wyluskania ma wyzszy priorytet.To jak dziala to,( pobrane z innego forum)
1. //przyklad:
2. char tab[2][10]; //2 napisy 10cio znakowe
3. char** tabptr = tab;
4.
5. **tabptr //pierwszy znak pierwszego napisu
6. **(tabptr+1) //pierwszy znak drugiego napisu
7. *(*tabptr+1) //drugi znak pierwszego napisu
8. *(*(tabptr+1)+1) //drugi znak drugiego napisu
chodzi mi glownie o linijke 8 i zapis *(*(tabptr+1)+1).Przeciez *(tabptr+1) wskaznik jest przesuwany i pobierana wartosc no i ok ale potem jest dodawana wartosc +1 to przeciez powinno to byc dzialanie arytmetyczne a tutaj ten wskaznik jest przesuwany?To sprzeczne z tym o co chodzilo przy wskaznikach pojedynczych
I jesli bym chcial teraz cos zapisac do tej komorki uzywajac scanf to zapis np **tabptr bedzie taki &(**tabptr) albo *(*(tabptr+1)+1) lub &(*(*(tabptr+1)+1)) ??W zasadzie to juz jest wskaznik ale nie wiem...
Bylbym bardzo wdzieczny gdyby ktos cos pojasnil bo juz siedze nad tym i cos nie moge zalapac ...