Ukazatel na vícerozměrné pole

geomodular

Re: Ukazatel na vícerozměrné pole
« Odpověď #15 kdy: 09. 06. 2011, 08:41:15 »
V cistom c-ecku a konkretne pod standardom c99 (c90 a nizsie uz nie) to mozes napisat aj takto:
Kód: [Vybrat]
#include <stdio.h>

int vymaz_ch(int a, int b, char pch[a][b]) {
int i, j;

for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
pch[i][j] = 0;
}
}

return 0;
}

int main(int argc, char **argv)
{
char ch[100][256];

vymaz_ch(100, 256, ch);

return 0;
}



Logik

  • *****
  • 1 022
    • Zobrazit profil
    • E-mail
Re: Ukazatel na vícerozměrné pole
« Odpověď #16 kdy: 09. 06. 2011, 12:29:25 »
jouda: Jo, to máš pravdu, zapoměl jsem, jak ji definoval prvně.  V tom případě to nemůže fungovat díky tomu, že ve funkci s argumentem char* je nesmysl výraz c[][]. Prostě tímdle způsobem se z dvojrozměrným polem pracovat nedá.

Re: Ukazatel na vícerozměrné pole
« Odpověď #17 kdy: 09. 06. 2011, 14:39:07 »
V cistom c-ecku a konkretne pod standardom c99 (c90 a nizsie uz nie) to mozes napisat aj takto:
Kód: [Vybrat]
#include <stdio.h>

int vymaz_ch(int a, int b, char pch[a][b]) {
....

Bohužel, nepřeloží se to v C++

Kód: [Vybrat]
ondra@natalie64:/tmp$ g++ test.cpp -o test
test.cpp:2:38: error: array bound is not an integer constant before ‘]’ token
test.cpp:2:41: error: array bound is not an integer constant before ‘]’ token
test.cpp: In function ‘int vymaz_ch(...)’:
test.cpp:3:29: error: ‘a’ was not declared in this scope
test.cpp:3:56: error: ‘b’ was not declared in this scope
test.cpp:3:68: error: ‘pch’ was not declared in this scope
ondra@natalie64:/tmp$

gcc to vezme

Jouda

Re: Ukazatel na vícerozměrné pole
« Odpověď #18 kdy: 11. 06. 2011, 09:07:24 »
Ono by to hlavně chtělo, aby původní tazatel (nm) napsal co od té funkce přesně očekává (specifikaci, jaké jsou povolené vstupy, ...) a na jakých kompilerech/standardu to má fungovat. Vyřešit to tak, aby naznačená věc v příkladu fungovala, se to dá několika způsoby. Jaký je ten optimální ale nejde bez dalších informací říct...