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

Wskaźnik na strukturę w tablicy dynamicznej

42 Warsaw Coding Academy
0 głosów
1,070 wizyt
pytanie zadane 30 października 2018 w C i C++ przez Alan Kruszyński Obywatel (1,410 p.)

Mam zmienną struct Struktura {int i; char c; float f;}. Alokuję tablicę tab takich struktur a potem w kolejnych komórkach tablicy tab umieszczam adresy kolejnych utworzonych Struktura. Jak mam się odwołać aby poprzez adres w komórce tablicy zmienić wartość w polu struktury? Jak wywołać na końcu funkcji losuj() zwrócenie adresu tablicy? Jest mi on potrzebny na zewnątrz tej funkcji jako argument innych funkcji

int losuj(int n){
  struct Struktura**tab=(struct Struktura**)malloc(n*sizeof(struct Struktura*));

   for (i = 0; i<=N; i++){
        tab[i]=(struct Struktura*)malloc(sizeof(struct Struktura));
       


        //Struktura[i].i=rand()%10000-1000;
        //Struktura[i].c=(char)rand()%22+66;
        //Struktura[i].f=1000+i;

    }

}

 

2 odpowiedzi

0 głosów
odpowiedź 30 października 2018 przez adrian17 Mentor (353,220 p.)

Alokuję tablicę tab takich struktur

Nie, stworzyłeś tablicę wskaźników na struktury. Jeśli chciałeś stworzyć po prostu tablicę struktur, przekombinowałeś - wystarczyło stworzyć `Struktura *tab`.

Jak mam się odwołać aby poprzez adres w komórce tablicy zmienić wartość w polu struktury?

// jesli Struktura **tab
tab[i]->i = 123;
// jesli Struktura *tab
tab[i].i = 123;

Jak wywołać na końcu funkcji losuj() zwrócenie adresu tablicy? 

return tab;

(tylko musisz jeszcze poprawić typ zwracany przez funkcję)

0 głosów
odpowiedź 31 października 2018 przez X3h Dyskutant (9,540 p.)
#include <iostream>
using namespace std;

typedef struct {
	int i;
	char c;
	float f;
} Struktura;

Struktura **zwrocTabliceStruktur(int n){
	
	Struktura **tablicaStruktur = (Struktura**)malloc(sizeof(Struktura*)*n);
	
	for(int i = 0; i < n; ++i){
		tablicaStruktur[i] = (Struktura*)malloc(sizeof(Struktura));
	}
	
	return tablicaStruktur;
	
}

int main() {
	
	Struktura **tablicaStruktur = zwrocTabliceStruktur(5);
	Struktura *strukturaZTablicyStruktur = tablicaStruktur[0];
	
	strukturaZTablicyStruktur->i = 0;
	strukturaZTablicyStruktur->c = 'a';
	strukturaZTablicyStruktur->f = 0.1;
	
	printf("%d, %c, %f", strukturaZTablicyStruktur->i, strukturaZTablicyStruktur->c, strukturaZTablicyStruktur->f);
	
	return 0;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 193 wizyt
0 głosów
1 odpowiedź 427 wizyt
pytanie zadane 25 sierpnia 2020 w C i C++ przez fortuna Początkujący (310 p.)
0 głosów
1 odpowiedź 232 wizyt

93,382 zapytań

142,382 odpowiedzi

322,540 komentarzy

62,738 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...