Pomoc przy wskaźnikach

0

Witam.
Ogolnie ucze się jeszcze c++ i nie moge do konca pojac wskaznikow.
Moze ktoś pomóc ?
Chodzi mi o ten przykład:

static size_t write_data_toFile(void *ptr, size_t size, size_t nmemb, void *stream) {
  size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
  return written;
}
void wwwToFile(const char* adres, const char * nazwa_pliku);
void wyszukajKursy(std::string waluta, const char * pliki);

struct wwwDownload{
	const char *bankName, *wwwAdres, *fileName;
}; 
 
int main(void) {

	wwwDownload www[] = {
		{"NBP","http://nbp.pl/kursy/kursyc.html","NBP.txt"},
		{"WBK","http://indywidualni.bzwbk.pl/przewodniki/kursy-walut/kursy-walut-bank-zachodni-wbk-przewodnik.html","WBK.txt"},
		{"PKO","http://www.pkobp.pl/index.php/id=waluty/section=ogol","PKO.txt"}
	};
	const unsigned size_www_download=sizeof(www)/sizeof(*www);
	for (int i=0 ; i < size_www_download ; ++i){
	wwwToFile (www[i].wwwAdres, www[i].fileName);
	wyszukajKursy("euro",www[i].fileName);
	}

    getchar();
	return 0;

} 
void wwwToFile(const char * wwwAdres, const char * fileName)  {  // <----TUTAJ
 
    const char *pagefilename = fileName; ; // <---- TUTAJ
    FILE *pagefile;
    CURL *curl_handle;

    curl_global_init(CURL_GLOBAL_ALL);
    curl_handle = curl_easy_init(); /* init the curl session */
    curl_easy_setopt(curl_handle, CURLOPT_URL, wwwAdres); /* set URL to get here */
    curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data_toFile);  /* send all data to this function  */
 
    pagefile = fopen(pagefilename, "wb"); /* open the file */
    if (pagefile) {
      curl_easy_setopt(curl_handle, CURLOPT_FILE, pagefile); /* write the page body to this file handle. CURLOPT_FILE is also known as
        CURLOPT_WRITEDATA*/
      curl_easy_perform(curl_handle); /* get it! */
      fclose(pagefile); /* close the header file */
    } 
    curl_easy_cleanup(curl_handle);        /* cleanup curl stuff */
} 

Chodzi mi o to, że nie moge zrozumieć czy tutaj występuje przypisanie wskaźnika do wskaźnika i czy w ogóle mozna przypisywac wskaznika do wskaznika ?
Ogolnie myslalem, że przy korzystaniu ze wskaźników uzywa się też znaku "&" do odczytywania adresów. A w tym przykładzie nigdzie nie ma takiego znaku.

     const char *pagefilename = fileName; ; // <---- TUTAJ
0

Wskaźnik to tylko liczba - adres pamięci. Przypisuje się je jak normalne liczby. pagefilename jest stałym wskaźnikiem na char, fileName też jest stałym wskaźnikiem na char. Po takim przypisaniu oba będą wskazywać na to samo miejsce, na ten sam napis.

Inną sprawą jest celowość tego przypisania. Po co to robić, zamiast używać po prostu fileName?

0

Własnie chciałem to dopisać, że własnie usunałem linijke :

    const char *pagefilename = fileName; ; 

i wpisy "pagefilename" po prostu zmieniłem na "fileName" i też wszystko działa :)

Czyli ja rozumiem wskaźniki też tak, że np
mam coś takiego:

int a = 100;
 

I powiedzmy wiem, że adres(&) zmiennej "a" to np.0x0038fb30 to oznacza ze obydwa przypisania poniżej są poprawne i oznaczają to samo ? :

int *Pointer_a = &a
 int *Pointer = 0038fb30
0

W zasadzie tak, w C++ trzeba jeszcze dodać reinterpret_cast<int *>. Nie oznacza to, że skoro da się to zrobić, to powinieneś tak robić. Nie powinieneś. W C/C++ da się zrobić bardzo dużo rzeczy, których się nie powinno. ;-)

http://ideone.com/wpTqb

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