C - alokace dymanicke matice ve funkci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C - alokace dymanicke matice ve funkci – C / C++ – Fórum – Programujte.comC - alokace dymanicke matice ve funkci – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Remder0
Návštěvník
22. 11. 2011   #1
-
0
-

Dobrý den,

programuji část programu, která alokuje dynamické pole o dvou rozměrech s tím, že samotnou alokaci chci ve funkci.

Funkce má jeden parametr (strukturu obsahující velikost matice a ukazatel na matici) a bude vracet int hodnotu. Naprogramoval jsem program který funguje, ale funkce vrací samotnou strukturu a já chci aby se změnila jen v parametru. Tuším, že se použijí ukazatelé, ale úplně nerozumím jejich použití. Předem díky za odpověď.

#include <stdio.h>
#include <stdlib.h>

/* Struktura obsahujici udaje o matici */
typedef struct Matrix
{
  int rowc;
  int colc;
  int **mat;
}TMatrix;

/* Alokace matice */
TMatrix matrix_alloc(TMatrix matrix)
{
  matrix.mat = (int**)malloc(matrix.colc * sizeof(int*));
  for (int i = 0; i <= matrix.colc; i++)
    matrix.mat[i] = (int*)malloc(matrix.rowc * sizeof(int));

  return matrix;
}

int main()
{
  TMatrix matrix =
  { // inicializace
    .rowc = 6,
    .colc = 6,
  };

  // alokace matice
  matrix = matrix_alloc(matrix);

  // test alokace
  for (int i = 0; i < matrix.rowc; i++)
  {
    for (int j = 0; j < matrix.colc; j++)
    {
        matrix.mat[i][j]=i*j;
        printf("%4d",matrix.mat[i][j]);
    }
    printf("\n");
  }

    return EXIT_SUCCESS;
}
Nahlásit jako SPAM
IP: 85.93.124.–
liborb
~ Redaktor
+18
Guru
22. 11. 2011   #2
-
0
-

   

bool matrix_alloc(TMatrix * matrix)
{
  matrix->mat = (int**)malloc(matrix->colc * sizeof(int*));
  for (int i = 0; i <= matrix->colc; i++)
    matrix->mat[i] = (int*)malloc(matrix->rowc * sizeof(int));

  // false, kdyz se nepodari alokovat
  return true;
}

a voláš:

matrix_alloc(&matrix);
Nahlásit jako SPAM
IP: 78.80.52.–
Remder0
Návštěvník
22. 11. 2011   #3
-
0
-

#2 liborb
Díky moc

Nahlásit jako SPAM
IP: 85.93.124.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 32 hostů

Podobná vlákna

Alokace pole — založil Blujacker

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý