Różnica między wskaźnikami...

0
const char * t2[] = { "abc", "q", "q" };
const char * t2[][5] = { "abc", "q", "q" };

Jaka jest między typ różnica?

0

Taka, że w pierwszym przypadku masz tablicę jednowymiarową, a w drugim dwuwymiarową. W twoim przykładzie pierwszy wymiar będzie miał rozmiar 1.
Jednak jak zrobisz tak:

const char * t2[][5] = {{"aa", "ab"}, {"ba", "bb"}};

To już pierwszy wymiar będzie miał rozmiar 2:

t2[0][0] pokazuje na "aa";
t2[0][1] pokazuje na "ab";
t2[1][0] pokazuje na "ba";
t2[1][1] pokazuje na "bb";
//pozostałe elementy mają wartość 0(NULL)
0

String należy traktowac jako "tablicę" ?

0

Zależy, od przypadku i co przez to rozumiesz. Z jednej strony w c++ korzysta się z dwóch rodzajów stringów. Jeden to jest po prostu klasa string w przestrzeni nazw std, drugi to jest c-string - ciąg znaków zakończony znakiem 0(NULL).
Dodatkowo to co tu masz to literały. One są przechowywane gdzieś w pamięci i masz do nich wskaźnik - nie możesz ich zmieniać. Tzn. możesz, ale może to spowodować różne dziwne zachowania.

//Ehhh pomyliłem się, przy inicjalizacji tablicy trochę inaczej to wygląda, ale już nie mam czasu tego poprawiać i tłumaczyć - narty czekają :D

0

W przypadku 1 wynikiem będzie jednowymiarowa tablica wskaźników na char, czyli tablica wskaźników na napisy zakończone zerem.
Czyli pamięć będzie wyglądać tak:
t1[] = { 0x43423, 0x43428, 0x4342D } // tu wstawiłem jakieś przypadkowe dane reprezentujące adresy każdy będzie wskazywał na te napisy, które będą w zupełnie innym miejscu pamięci.

W przypadku 2 masz tablicę dwuwymiarową o rozmiarze 3 na 5, co będzie reprezentowane przez jednolity blok pamięci. Pamięć będzie wyglądała tak:
t2[] = { 'a', 'b', 'c', '\0', 'x', 'q', '\0', 'x', 'x', 'x', 'q', '\0', 'x', 'x', 'x' }
gdzie 'x' to znak nieokreślony (cokolwiek)

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