pomoc ze zrozumieniem

0

siema mam pewien problem robiliśmy zadania na zajęciach z c++ i po tych zajęciach ćwiczeni-owiec pytał nas czym jest ten pogrubiony napis biblioteka w taniaKsiazka(biblioteka); co wysyła do taniaKsiazka itp. No i ja no dokładnie nie potrafię określić co to dokładnie jest ale no mówiłem ,że przesyła zawartość z tej tablicy 100 elementowej do taniaKsiazka która tam już sobie z tym coś robi i zapisuje itp. No ale to jest źle nie wiem jak to wytłumaczyć .Może ktoś wie co to dokładnie jest i co wysyła pozdrawiam.

#include <iostream>
#include <string>
#include <ctime>

using namespace std;
struct ksiazka 
{
  string tytul;
  string autor;
  unsigned index;
  int cena;
 };
void taniaKsiazka(ksiazka *tablica);
int main() 
{
	ksiazka biblioteka[100];
	taniaKsiazka(biblioteka);
	system("pause");
	return 0;
}
void taniaKsiazka(ksiazka *tablica)
{
	srand(time(0));
	for(int i=0; i<100; i++)
	{
		tablica[i].index=rand()%1000000;
		tablica[i].cena=rand()%20+1;
		if(tablica[i].cena<10)
		{
			cout<<"tytul:"<<tablica[i].tytul;
			cout<<"\t autor:"<<tablica[i].autor;
			cout<<"\t index:"<<tablica[i].index;
			cout<<"\t cena:"<<tablica[i].cena<<endl;
		}
	}
}
 
0

Cos takiego:

 ksiazka biblioteka[100];

Jest deklaracją 100 elementowej tablicy obiektow ksiazka. Czyli tworzysz na stosie blok pamieci wielkosci 100*wielkosc ksiazki bajtow. Poza tym w programie masz linijke:

 void taniaKsiazka(ksiazka *tablica);

To z kolei jest deklaracją funkcji przyjmującej wskaźnik na strukture ksiazka i zwracającą void. Musisz teraz zauważyć że nazwa tablicy jest wskaźnikiem na jej pierwszy element. Czyli kiedy odwołujesz się do bilblioteki nie używając nawiasow kwadratowych dostaniesz adres pierwszego elementu, jeżeli teraz prześlesz do funkcji adres pierwszego elementu tablicy, to w łatwy sposob będziesz mógł wyciągnąć informacje o pozostałych elementach (drugi element jest pod adresem pierwszy+2, trzeci pod adresem pierwszy+3 itd).

0
a napisał(a)

Cos takiego:

 ksiazka biblioteka[100];

Jest deklaracją 100 elementowej tablicy obiektow ksiazka. Czyli tworzysz na stosie blok pamieci wielkosci 100*wielkosc ksiazki bajtow. Poza tym w programie masz linijke:

 void taniaKsiazka(ksiazka *tablica);

To z kolei jest deklaracją funkcji przyjmującej wskaźnik na strukture ksiazka i zwracającą void. Musisz teraz zauważyć że nazwa tablicy jest wskaźnikiem na jej pierwszy element. Czyli kiedy odwołujesz się do bilblioteki nie używając nawiasow kwadratowych dostaniesz adres pierwszego elementu, jeżeli teraz prześlesz do funkcji adres pierwszego elementu tablicy, to w łatwy sposob będziesz mógł wyciągnąć informacje o pozostałych elementach (drugi element jest pod adresem pierwszy+2, trzeci pod adresem pierwszy+3 itd).

dzieki wielki. Czyli

taniaKsiazka(biblioteka); 

oznacza ze funckja taniaKsiazka pobiera ze 100 elementowej tablicy obiektow adres najpierw pierwszego elemnetu ktory po przesłaniu do funkcji ułatwia dostep do pozostałych adresow i informacji w nich zawartych ? dobrze zrozumialem ?

0

Ogólnie zawsze nazwa jest wskaźnikiem na pierwszy element(można tak powiedzieć). A po prostu elementy są poukładane obok siebie.
Choć nie wiem, czy ta funkcja modyfikuje tablicę w ogóle, gdyż w tym wypadku należało by chyba podać &biblioteka[0]. Ale nie wiem dokładnie.

0

Modyfikuje - jest to przekazywane przez wskaźnik, do funkcji jest przekazywany adres początku bloku pamięci, gdzie znajduje się ta tablica. W tej sytuacji biblioteka == &biblioteka[0]

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