Комментарии под каждой частью (правильные биты):
/* Static char array */
char src[] = "rabbit";
Этот массив не является статическим - он имеет auto
длительность хранения.
/* pointer to array of pointers to char's - create 6 pointers in this array */
char *dest[sizeof(src)];
Это массив указателей на символ, а не указатель на массив. Длина массива равна 7, потому что sizeof(src)
равно 7 (он включает терминатор строки nul).
/* chr_ptr pointer now points to the memory location where 'rabbit' is stored. */
chr_ptr = src;
Точнее, он указывает на первый символ в src
, который является 'r'
в "rabbit"
.
/* ptr_ptr points to the first memory address of the pointer array of where dest is stored */
ptr_ptr = dest;
Он указывает на первый указатель в массиве dest
.
/* Keep going until NULL is found - However, my program never finds it, ends in UB */
while(ptr_ptr != NULL) {
Правильно - потому что вы никогда не инициализировали dest
. Вы можете изменить объявление dest
на следующее:
char *dest[sizeof(src)] = { 0 };
... и это будет работать.