[C++] Tablice znakowe i wskaźnik na C-string


(Jooooooozek) #1

Czesc wam, mam pytanie odnośnie tablic znakowych i wskaźników const char*.

Wszystkie te formy zainicjalizowania ich są dopuszczalne:

//Wskaźniki:const char* wsk = "abc";char* wsk = { "abc" };

(Fiołek) #2

Różnią się tylko sposobem inicjalizowania, składnią i tym, że sizeof na tablicy zwróci jej rozmiar a na wskaźniku zwróci rozmiar wskaźnika.


(Jooooooozek) #3

OK, rzeczywiście sizeofem i składnią (bo czasem są klamry { } ). Ale sposobem - jak ? Aby jeszcze bardziej uściślić pytanie:

const char tabl[] = "abc";const char tabl[] = { "abc" }; [/code]

czym różnią się tylko te dwa zapisy. Czy użycie nawiasów coś zmienia :?:

(Fiołek) #4

Może źle się wyraziłem, chodziło mi właśnie o { }.

Ich użycie nic nie zmienia.


(Lol600000065) #5

A ja jeszcze mam takie pytania właśnie odnośnie tych nawiasów klamrowych bo mam zadanie z tym związane na jutro do szkoły (poziom zadań coraz bardziej mnie przeraża... ^.^).

1)

const char tabl[] = "abc";

Jest wyjątkiem ponieważ zawsze przy inicjalizacji tablic trzeba używać nawiasów klamrowych, tak :?: 2)

const char* wsk = { "abc" };

Możliwe jest zrobienie czegoś takiego, ponieważ przy inicjalizacji każdego obiektu można posłużyć się nawiasami klamrowymi. Jeśli to nie jest tablica, to liczba inicjalizatorów musi wynieść 1:

int zmienna = { 4 };

int* wsk = { &zmienna };

double pi = { 3.14, 3.1415 }; //<--- Błąd ! Za dużo inicjalizatorów !

Można to tak wytłumaczyć :?:


(Fiołek) #6

1)Tak

2)Tak, ale raczej takiej inicjalizacji dla zmienny nietablicowych się nie stosuje.


([alex]) #7

Stosuje się:

struct Punkt { double x,y; };Punkt A={0,0},B={3,4}; [/code]

(Fiołek) #8

Racja, mój błąd. Zapomniałem o typach nieatomowych.