Проблема в вашем коде (вызывающая ошибку сегментации) заключается в следующей строке:
pArr[i][j] = arr[j];
Теперь вы правы, предполагая, что, поскольку pArr
является массивом указателей, вы можете использовать каждый его элементов (то есть parr[i]
) как «массив»; однако вы можете только сделать это после того, как вы присвоили значение этому элементу (т. е. после того, как рассматриваемому элементу parr[i]
был присвоен действительный адрес).
Итак, после выполнения вашего первого блока кода каждое значение pArr[i]
будет указывать на данный массив, поэтому вы можете использовать pArr[i][j]
для доступа к отдельным элементам этого массива.
Однако во втором блоке попытка присвоить значение pArr[i][j]
заставляет компилятор (пытаться) разыменовать адрес, соответствующий каждому pArr[i]
, с добавленным к нему индексом j
. Но элементам pArr[i]
еще не присвоены значения, поэтому попытка не удалась.
Я не полностью уверен, чего вы пытаетесь достичь, но, если вы хотите, чтобы каждый элемент pArr
, чтобы указать на «соответствующий» символьный элемент arr
, тогда вы можете использовать код, подобный этому:
for (int i = 0; i < N; i++)
pArr[i] = &arr[i];