Dostęp do tablicy poprzez wskaźnik

0

Witam,
Mam pytanie odnośnie sprawy, którą dziś po raz kolejny niestety dostrzegłem.
Chodzi dokładnie o to, że mając wskażnik do tablicy - globalny, mogę normalnie wyświetlać jego zawartość w funkcji main. Przykłąd:

char Ttab[]= {'a','b','c','d','e','f'};
char *wsk= Ttab;
(...)
int main()
{
    int i;
    int ilosc= (sizeof(Ttab)/sizeof(char));

    for (i=0; i<ilosc; i++)
    {
        printf("Znak %d to: %c\n",i, wsk[i]);
    }
    return 0;
}

Tak działa dobrze. Ale gdy chcę stworzyć funkcję wyświetlającą to jest już problem...
Przykładowo taka funkcja:

void wyswietl(char *tab[])
{
    int i;
    int liczba = (sizeof(Ttab)/sizeof(char));
    printf("W funkcji:\n");
    for (i=0; i<liczba; i++)
    {
        printf("%c\n",tab[i]);
    }
}

Już niestety zwraca krzaki. Nie wiem co jest tego przyczyną, w niektórych programach operujących na wskaźnikach też się już z tym spotkałem.
Proszę o wskazówki.

1

Zmien:

void wyswietl(char *tab[])

na:

void wyswietl(char *tab)

a najlepiej na:

void wyswietl(char *tab, int liczba)
0

Może ten kod coś rozjaśni:

void fun1(char *tab,int ilosc)
  {
   for(int i=0;i<ilosc;++i) printf("fun1: %c\n",tab[i]);
   printf("\n");
  }

void fun2(char tab[],int ilosc)
  {
   for(int i=0;i<ilosc;++i) printf("fun2: %c\n",tab[i]);
   printf("\n");
  }

void fun3(char *tab)
  {
   while(*tab) printf("fun3: %c\n",*(tab++));
   printf("\n");
  }

void fun3(char tab[])
  {
   for(char *p=tab;*p;++p) printf("fun4: %c\n",*p);
   printf("\n");
  }

int main()
  {
   char Ttab[]="abcdef";
   const int ilosc=sizeof(Ttab)-1; // sizeof(char) zawsze = 1 
   char *wsk=Ttab;
   for(int i=0;i<ilosc;++i) printf("Znak %d to: %c\n",i,wsk[i]);
   printf("\n");
   for(char *p=Ttab;*p;++p) printf("Znak %c\n",*p);
   printf("\n");
   fun1(Ttab,ilosc); // w funkcji sizeof nie zadziała tak jak sobie myslisz
   fun2(Ttab,ilosc);
   fun3(Ttab);
   fun4(Ttab);
   return 0;
  }

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