Дуализм двумерного массива и массива указателей
Рассмотрим возможные операции над массивом указателей на строки:
char *p[20];
p[i] // указатель на i-ю строку
p[i]++ // перейти в i-й строке с следующему символу
*(p[i] + j) // j-й символ в i-ой строке
p[i][j] // j-й символ в i-ой строке.
Из последнего примера видно, что синтаксис операции по работе с символами строк с использованием массива указателей идентичен синтаксису такой же операции в двумерном массиве. Очевидно, что этим подчеркивается единство логической организации двух структур данных. Но при этом не следует забывать, что на самом деле физическая их реализация различна.