Mapowanie tablicy dwuwymiarowej w funkcji

0

nie umiem zrobic funkcji przekazującej i zwracającej tablice dwuwymiarowa. na razie mam tak:

bool random_atoms(bool **tab, int size) {
    int atom_number = 0;
    int randxtab[7];
    int randytab[7];
    do
    {
        int randx = random(size);
        int randy = random(size);
        if (already_was(randx, randy, randxtab, randytab, atoms_number(size)) == false)
        {
            randxtab[atom_number] = randx;
            randytab[atom_number] = randy;
            atom_number++;
            tab[randy][randx] = true;
        }
    } while (atom_number < atoms_number(size));
    return tab;
}

int main(){
  bool tab[10][10];
  random_atoms(tab, 5);
}
0

A to *ptr nie wystarczy? Zrób eksperyment. Utwórz tablicę dwuwymiarową. Nastaw pointer zwykły na początek. Potem pojedź nim tyle jaki jest rozmiar tablicy wyświetlając każdą wartość.

#include <iostream>
#include <stdio.h>

using namespace std;

int moja_funkcja(int *ptr2){
   
    
    for(int i=0;i<4;i++){
        cout<<*ptr2;
        *ptr2 = i+4;
        ptr2++;
    }
    
    cout<<"\n";
    return 0;
}

int main()
{
    int tab[2][2];
    tab[0][0]=0;
    tab[0][1]=1;
    tab[1][0]=2;
    tab[1][1]=3;
    
    int *ptr; 
    ptr = &tab[0][0];
    moja_funkcja(ptr);
    
    ptr = &tab[0][0];
    for(int i=0;i<4;i++){
        cout<<*ptr;
        
        ptr++;}

    return 0;
}

Tablica wielowymiarowa jest to sposób prezentacji danych czytelny dla człowieka.

Wszystko w komputerze jest jest 01010101100101 itp.

h.jpg

Pomijając fakt, że tablica dwuwymiarowa to chyba pobiera 2 parametry jako rozmiar.

0

Trzeba określić drugi wymiar w deklaracji parametru.

#include <stdio.h>

void test (int tab[][3])
{
        int i, j;
    
        for (i = 0; i < 3; ++i)
                for (j = 0; j < 3; ++j)
                        printf ("%d\n", tab[i][j]);
}

int main ()
{
        int dwuwym[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

        test (dwuwym);
        return 0;
}
1

w C++ tablica powinna być klasą (i będzie miała wszystko co trzeba)

Problemem jest to, że klikasz do głębi w C wierząc, że to jest C++

Powiem ci w sekrecie, nie mów nikomu.
C tak naprawdę nie ma prawdziwych tablic, tylko wskaźniki i arytmetyka wskaźników (w mojej opinii prawdziwy trillion dollar bug)

4

@AnyKtokolwiek a dlaczego tak uważasz z ciekawości się spytam? Jak znasz jakieś opracowanie to możesz podesłać bo zaciekawiles — Czitels dziś, 05:54

Sama idea otwartego pointera, i BRAK prawdziwej rasowej tablicy, brak wymiaru/ów "wrośniętego" w tzw "tablicę"

Mamy lata 1970-te. jest od groma dojrzałych języków. Pan Wirth pracuje, a może już wydał Pascala. Algol jest dawno zakorzeniony (nie programowałem - ale kupiłem po antykwariatach PRLowskie książki). Gdzieś tam rząd i armia pracuje nad Adą.

Prawda, na moc ówczesnych komputerów kompilatory są deko ciężkawe, ale to by przeminęło za 5-10 lat.
Pojawia się C. Współcześnie do mnie dociera, że celem było zaprojektowanie języka, NIE lepszego obiektywnie, a na który łatwo będzie się portowało "zerowy" natywny kompilator. I powstało C

Jest wielką nieprawdą mantra która powtarzamy, że jest jedynym / najlpeszym językiem do programowania systemowego.
Pascal (żeby pozostać w epoce) z naprawdę drobnymi extenszynami równie dobrze by mógł do tego służyć (a ma prawdziwe bezpieczne tablice). Przyklepać te ekstenszyny w jakiejś pod-bibliotece i voila

Otwarty nie zabezpieczony nijak pointer powinien być dodatkowym ficzerem (np do pobierania spoza przestrzeni procesu), a nie rdzeniem języka. Kto kibicuje "unsafe" w Javie / C# kuma o czym mówię.

Otwarty pointer to MZ trillion dollar bug. Sądzę ze tyle branża wydała na odszkodowania, na utracone sondy kosmiczne (nie mam dowodów), przepłaciła godziny pracy, spowolniła rozwój tego i czy owego produktu ...

(innym ficzerem jest kompatybilność każdego wyrażenia z typem logicznym - oszczędność jednego-dwóch rozkazów maszynowych w najstarszych kompilatorach, problem marginalny już 5-10 lat później, syf na całą epokę i rozliczne jezyki)

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