Wskaźniki / operacje na tablicach

0

Witam, jestem początkującym programistą. Chciałbym wypełnić przykładowo iteracyjnie tablicę 10 elementową i użyć do tego celu funkcji i wskaźników.
Nie potrafię sobie jednak z tym poradzić, poniżej zamieszczam moje "zmagania".
Z góry dziękuję za wszelaką pomoc...

#include <stdio.h>

float wypelnienie_tablic (float *tab1, int *ROZMIAR)
{
    for (int i=0 ; i<*ROZMIAR; i++)
    {
        *tab1[i]=i;             //tutaj wywala błąd
    }

}

main (void)
{
    const int ROZMIAR = 10;              // stała decydująca o rozmiarze tablicy

    float tab1[ROZMIAR];                   // deklaracja tablic typu float
  
    wypelnienie_tablic(tab1,&ROZMIAR);
    odczyt_tablic(tab1,&ROZMIAR);


getchar();
}

Błąd jaki napotykam to:
|8|error: invalid type argument of 'unary *'

1
#include <iostream>
using namespace std;
void wypelnij(int *wsk_tablica, int ile); // deklaracja funkcji
int main(int argc, char *argv[])
{
int tablica[10]; // tablica 10 elementow
wypelnij(tablica,10); // wywolujemy funkcje z parametrami: adres tablicy (nazwa jest adresem!) oraz ile ma elementow

//****wyswietlamy
for(int i = 0; i < 10; i++)
{
    cout << tablica[i] << endl;
}

}
void wypelnij(int *wsk_tablica, int ile)
{
    for(int i = 0; i < ile; i++)
    {
        wsk_tablica[i] = i;
    }
}

 
1

Identyfikatory tablic różnią się od identyfikatorów zwykłych zmiennych. Powodem jest to, że są one l-wartościami czyli nie możesz przypisać im wartości. Nazwa tablicy jest wskaźnikiem na jej początek. A jeżeli chcesz dorwać się do jej wartości, to nie potrzebujesz operatora wyłuskania * tak jak w przypadku normalnej zmiennej.

Małe przejęzyczenie.. miało być nie są l-wartościami:)

0

Zielu on piszę w C a nie w C++.
W C jeżeli napiszesz fun() to oznacza to funkcję z zmienną ilością argumentów,a dopiero fun(void) oznacza funkcję bezparametrową. A co do symfoni, to dobry wybór na początek.

0

Zamień %d na %f.
Zielu To wszystko co on piszę, to składnia C jakbyś nie zauważył. Nio oprócz const, bo wydaję mi się, że tego słówka nie ma w standardzie c i trzeba używać instrukcji preprocesora:

#define ROZMIAR 10 

Co zrobił później..
A to, że czyta symfonie, nie zmienia faktu, że ten kod jest ewidentnie w C.
Poza tym to co mówił Zielu, deklarujesz funkcję która zwraca float, a nie masz tam nigdzie return..

1
konor napisał(a)

#include <iostream>
#define ROZMIAR 10
using namespace std;

void wypelnienie_tablic (float *wsk_tab1, int ile);
void odczyt_tablic (float *wsk_tab1, int ile);

int main ()
{
    float tab1[ROZMIAR];                                           // deklaracja tablic typu float

    wypelnienie_tablic(tab1,ROZMIAR);
    odczyt_tablic(tab1,ROZMIAR);

cin.get();
return 0;
}

void wypelnienie_tablic (float *wsk_tab1, int ile)
{
    for (int i = 0 ; i < ile; i++)
    {
        wsk_tab1[i] = i;
    }

}

void odczyt_tablic (float *wsk_tab1, int ile)
{
     for (int i = 0 ; i < ile; i++)
    {
        cout << endl << wsk_tab1[i] ;

    }
}

Otóż problemem okazała się biblioteka <stdio.h>. Dzięki za pomoc ;)

otóż problemem nie była stdio.h tylko formatowanie w printfie (które przed chwilą edytowałeś i zamieniłeś na strumienie!), miałeś tam %d, a wyświetlałeś tablice float'ów!

0
void odczyt_tablic (float *tab1, int ROZMIAR)
{
    for (int i=0 ; i<ROZMIAR; i++)
    {
        printf("%d\n",tab1[i]);             //tutaj wywala b³¹d
    }
}

Tak to będzie w C. A jak używasz C++, to używał stałych const, bo po to one są, aby nie używać preprocesora który nie ma kontroli typów..

1

void odczyt_tablic (float *tab1, int ROZMIAR)
{
for (int i=0 ; i<ROZMIAR; i++)
{
printf("%f\n",tab1[i]); //tutaj wywala b³¹d
}
}

Tak to będzie w C. A jak używasz C++, to używał stałych const, bo po to one są, aby nie używać preprocesora który nie ma kontroli typów..

proszę o usunięcie mojego wcześniejszego postu:)

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