Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

tablice char VS wskazniki char

Ostatnio zmodyfikowano 2016-10-30 21:12
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
tablice char VS wskazniki char
» 2016-10-30 02:47:08
Witam. Chcialbym dowiedziec sie, co jest lepsze, tablica char czy wskaznik char. Prosze o argumenty za i przeciw do obu. Chodzi mi o sytuacje kiedy np. Przesylamy jakis string jako argumeny do funkcji itp.
P-153041
pekfos
» 2016-10-30 03:01:43
Z pytania można wywnioskować tyle, że sam nie wiesz, kiedy używasz wskaźnika. Tablica wydaje się być jeszcze oczywista, ale kto tam wie..
P-153044
Gibas11
» 2016-10-30 09:32:46
Oba są kiepskie bo zawsze przekazujesz oryginał ciągu a nie kopię, moźe by tak std::string? Ale jak już musisz, to funkcje z reguły przyjmują wskaźniki a co im dasz nie robi różnicy bo tablica jest wskaźnikiem z ładnym opakowaniem. Więc wszystko zależy od tego co robiłeś z tym wcześniej i które było akurat wygodniejsze.
P-153046
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-10-30 12:25:47
Pekfos, chodzi mi o to, że czytam książke do nauki c++ i w niej autor, kiedy przekazuje jakiegoś stringa do funkcji, to używa zywkle:
void funk( const char * wsk )
 a nie
void funk( char tab[] )
przy czym nie bardzo rozumiem dlaczego, skoro tablice można modyfikować, a wskaźnik jest const...
P-153051
pekfos
» 2016-10-30 13:47:53
Te zapisy różnią się tylko słowem const, w obu przypadkach przekazujesz wskaźnik. A czy ma być wskaźnikiem na stałą, czy nie, to już zależy od konkretnej funkcji.
P-153053
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-10-30 15:08:02
Ok, ale co jest wygodniejsze... albo co Ty używasz (zwykle)?
P-153057
Monika90
» 2016-10-30 15:19:23
Takie deklaracje funkcji są równoważne:

void f( const char * ptr );
 ==
void f( const char ptr[] );


i te też:

void f( char * ptr );
 ==
void f( char ptr[] );



A te nie są:

void f( const char * ptr );
 !=
void f( char ptr[] );


Do funkcji
void f( char ptr[] );
 nie da się przekazać literału "xyz", nawet jeśli kompilator którego używasz na to pozwala, to nie jest to standardowe zachowanie.



Raczej używa się tych z gwiazdką, bo te z [] wprowadzają zamieszanie.
P-153058
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-10-30 20:24:00
Rozumiem... Zapytam o jeszcze jedno, pewnie czytałem o tym, ale już zapomniałem, kiedy mamy wskaźniki:
C/C++
char a[] { "xyz" };
char wskchar = a;
int b = 5;
int * wskint = & b;
dlaczego akurat wskaźnik char nie zachowuje się tak, jak inne, tzn. cout<<wskint - adres obiektu na ktory wskazuje
cout<<wskchar - zawartosc tablicy.
Dlaczego tak jest?
P-153073
« 1 » 2
  Strona 1 z 2 Następna strona