Małe pytanie odnośnie wskaźników do tablicy

Małe pytanie odnośnie wskaźników do tablicy
mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Jeżeli mam tak zadeklarowany wskaźnik do tablicy jak w tym programiku:

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

int main()
{
    int (*pa)[3] = {1,2,3};

    printf("%d\n", pa);

    *(pa + 1);

    printf("%d\n", pa);
    getch();
    return 0;
}
 

to jak mam poruszać się po tablicy? Bo sposób, którego tutaj użyłem nie działa poprawnie.

LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
0

A co wg Ciebie robi "*(pa + 1);" ? I co to jest "int (*pa)[3]" ? :>

mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

int (*pa)[3] jest wskaźnikiem do tablicy 3 elementów, a *(pa + 1) ma przesuwać po prostu wskaźnik na następny element

artur_waw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 155
0

Troszkę zagmatwałeś - konstrukcja:

Kopiuj
int (*pa)[3]

byłaby dobra ale do macierzy! :)

Można na upartego napisać coś takiego:

Kopiuj
#include <stdio.h>

  int main() {
  int tablica[3] = {1,2,3};
  int (*pa)[3] = &tablica;
  printf("%d\n", **pa); // drukuje 1
  printf("%d\n", *(*pa+1)); // drukuje 2
  printf("%d\n", *(*pa+2)); // drukuje 3
  return 0;
}

Jednak raczej nie taki był Twój zamysł :)

mic4ael
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Muszę o tym trochę dokładniej poczytać widocznie.

LN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1398
0

Tobie chyba chodziło o coś takiego (pisane z palca, bez testowania):

Kopiuj

 #include <stdio.h>
 
int main() {
  int tablica[3] = {1,2,3};
  int * wsk = tablica;
  printf("%d\n", *wsk); // drukuje 1
  printf("%d\n", *(wsk+1)); // drukuje 2
  printf("%d\n", *(wsk+2)); // drukuje 3
  wsk = wsk+1;
  printf("%d\n", *(wsk)); // drukuje 2
  wsk = wsk+1;
  printf("%d\n", *(wsk)); // drukuje 3
  return 0;
}
unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
0

samo tablica już jest wskaźnikiem
można zrobić coś takiego:

Kopiuj
#include <stdio.h>
 
int main() {
  int wsk[3] = {1,2,3};
  printf("%d\n", *wsk); // drukuje 1
  printf("%d\n", *(wsk+1)); // drukuje 2
  printf("%d\n", *(wsk+2)); // drukuje 3
  return 0;
}

*(wsk+2) to to samo co wsk[2]

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.