Definice pole v C (jak použít pole uvnitř struct?) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Definice pole v C (jak použít pole uvnitř struct?) – C / C++ – Fórum – Programujte.comDefinice pole v C (jak použít pole uvnitř struct?) – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
oxidián0
Věrný člen
19. 1. 2015   #1
-
0
-

Zdravím,
potřeboval bych poradit jak v jazyce C nadefinovat pole ARR. V testu níže má mít tento typ 6 elementů. Stačili by 4, ale pro ukázku jsem použil 6 elementů.

Potřeboval bych k němu přistupovat takto:

[code]

typedef struct {
    ARR ** pointers; // 2D array or pointers to char*
} ARRAY_OF_POINTERS;

void main(){
ARRAY_OF_POINTERS pointers;
int i = 0;
char * str;
str = malloc(50);
strcpy(str, "Toto je test");
pointers[i][0]=str;
str=str+4;
pointers[i][1]=str;
str++;
pointers[i][2]=str;
str=str+2;
pointers[i][3]=str;
sts++;
pointers[i][4]=str;
str=str+4;
pointers[i][5]=str;
}

[/code]



Jde o to že ARR se používá ve struktuře ARRAY_OF_POINTERS. A já nevím jak to nadefinovat abych k tomu mohl přistupovat pomocí hranatých závorek. Můžete pomoct?

Nahlásit jako SPAM
IP: 78.45.199.–
Reklama
Reklama
KIIV+42
God of flame
19. 1. 2015   #2
-
0
-

Hranaty zavorky muzes pouzit tak jak tak, ale ma to zasadni chybu - musis alokovat jednotlive polozky uvnitr struktury (hlavne to pole pointeru)

Nebo pouzit proste:    char * pole[6];

At uz je ARR cokoliv

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Věrný člen
20. 1. 2015   #3
-
0
-

Nevím co tím myslíš. Strukturu tedy asi použít nemohu, to bych musel definovat členy...

Chci k tomu přistupovat pomocí array[a][b] kde počet prvků a je dynamický (může se změnit v závislosti na okolnostech) a počet prvků b je za všech okolností stejný.

A co by se stalo kdybych udělal char ** array[6]; To by asi bylo jako array[b][a]? Možná to definovat takto:

char ** array[][6];?

Tady to dělají takto:

http://www.tutorialspoint.com/cprogramming/c_multi_dimensional_arrays.htm


int threedim[5][10][4];

Jenže to mi nevyhovuje, protože první úroveň pole by neměla mít pevnou délku (pevný počet elementů).

Nahlásit jako SPAM
IP: 78.45.199.–
KIIV+42
God of flame
20. 1. 2015   #4
-
0
-

#3 oxidián
Jo takhle si to myslel .. to ses ve spatnym jazyku - strukturu tady pouzit nemuzes, abys to pak jen tak indexoval bez udani prvku (ne ze by to neslo, ale uz sou to velice necitelny hacky)

Treba v C++ muzes pretizit operator[], aby u objektu vytahl konkretni index z pole a vratil dejme tomu referenci a dalsi urovne uz by byly nativne (krom toho sou na to vhodny kontejnery, co se o zvetsovani postaraji samy)

char ** array[6]; a char ** array[][6]; to uz sou docela butalni mnohaurovnovy pointery kombinovany s polem

Pritom ti staci ten char ** array;  pak pomoci malloc nahodit nejaky vhodny pocet polozek pro prvni uroven pointeru a pripadne realloc pro zvetseni

Nebo spojovy seznam a vzdy vkladat na konec (ale tady nehrozi indexace pomoci [])

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Věrný člen
20. 1. 2015   #5
-
0
-

char ** array; chápu; já si chtěl ale ušetřit práci s allokováním paměti na druhé úrovni :-( Vlastně potřebuju char *** array; ... kde platí char (a)(b)(odkaz na již alokovaný řetězec)

Nahlásit jako SPAM
IP: 78.45.199.–
KIIV+42
God of flame
20. 1. 2015   #6
-
0
-

#5 oxidián
A pritom si to uz mohl davno mit vyreseny, misto hledani "zkratky", ktera je v zaveru mnohonasobne slozitejsi, nez to udelat rovnou :D

Nahlásit jako SPAM
IP: 94.113.95.–
Program vždy dělá to co naprogramujete, ne to co chcete...
oxidián0
Věrný člen
20. 1. 2015   #7
-
0
-

Musel jsem se zamyslet nad tím jak to funguje. Zezačátku mě vůbec nedošlo že struct k tomu nemůžu vůbec použít. Ale potřebuju tři pointery, ne dva.

Nahlásit jako SPAM
IP: 78.45.199.–
q
~ Anonymní uživatel
219 příspěvků
20. 1. 2015   #8
-
0
-

#7 oxidián
Když chápeš 2, tak chápeš i 3. A ve struct můžeš deklarovat cokoliv, co kdekoliv jinde.

Nahlásit jako SPAM
IP: 78.156.159.–
oxidián0
Věrný člen
20. 1. 2015   #9
-
0
-

přes struct je to ale složitější.

Nahlásit jako SPAM
IP: 78.45.199.–
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, 69 hostů

Moderátoři diskuze

 

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