• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica dwuwymiarowa

Object Storage Arubacloud
0 głosów
234 wizyt
pytanie zadane 11 grudnia 2018 w C i C++ przez Roman1212 Początkujący (460 p.)
edycja 11 grudnia 2018 przez Roman1212

Jak przesłać tablice dwuwymiarowa do funkcji

 

#include<iostream>

using namespace std;

void tworzenie(float a[][],int n)
{

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>a[i][j];

        }

    }

}


int main()
{
    int n;
    cout<<"Podaj wymiary macierzy kwadratowej";
    cin>>n;
    float tm[n][n];
    tworzenie(tn,n);
    
    return 0;
}

Wyskakuje mi taki komunikat 

declaration of 'a' as multidimensional array must have bounds for all dimensions

 

komentarz 11 grudnia 2018 przez niezalogowany
Do funkcji przesyłasz adres tablicy, czyli w funkcji zadeklaruj wskaźnik, a potem wywołujesz ją poprzez przekazanie adresu tablicy, czyli też przez wskaźnik. Przynajmniej ja to tak widzę.

2 odpowiedzi

0 głosów
odpowiedź 11 grudnia 2018 przez PlusPlus Nowicjusz (220 p.)
tworzenie(a,n);

Czym jest a? Nie zdefiniowano go wcześniej. Chyba,że linijke wyżej chciałeś zapisać coś innego :)

Jak przesłać tablice dwuwymiarowa do funkcji

Najlepiej tak jak każdą inną zmienną (bo tablica jest zmienną) poprzez

return NazwaTablicy;

Wtedy można zwrócić w ten sposób

NazwaTablicy = NazwaFunkcjiTworzocajTablice(parametry);

Patrząc na twój kod tak jakbyś próbował zwrócić przez referencje tylko, że to troszkę inaczej

0 głosów
odpowiedź 11 grudnia 2018 przez RafalS VIP (122,820 p.)

Zacznijmy od tego, że coś takiego:

	cin >> n;
	float tm[n][n];

jest niezgodne ze standardem i tylko częśc kompilatorów idzie na ręke i na to pozwala: https://forum.pasja-informatyki.pl/384088/tablica-statyczna-a-dynamiczna?show=384088#q384088

Jak już zmienisz sposob tworzenia tablicy to przy okazji rozwiaze sie problem przekazania do funkcji, bo obecna funkcja zadziała :P

Gdybyś mimo wszystko chciał przekazać tablice alokowaną statycznie to w sygnaturze funkcji musisz podać jej zewnetrzny rozmiar tzn:

void tworzenie(float a[][5], int n)

Jest to konieczne ze względu na to, że kompilator zamienia taką deklaracje:

void tworzenie(float a[][], int n)

na taką:

void tworzenie(float **a, int n)

A tablica statyczna 2d nie moze byc skonwertowana do podwójnego wskaźnika tylko do (*)[5] - wskaźnika na tablice o dlugosci 5, gdzie 5 ro zewnetrzny rozmiar tablicy (dlugosc wiersza)

Podobne pytania

0 głosów
0 odpowiedzi 143 wizyt
0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 20 marca 2020 w C i C++ przez Matibedi335 Początkujący (350 p.)
0 głosów
1 odpowiedź 167 wizyt

92,568 zapytań

141,424 odpowiedzi

319,632 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...