Другие языки программирования и технологии

указатели/ массивы/ строки. Язык С++

Что значит это объявление?

unsigned char **NAME;

искала в интернете, но ничего подобного не нашла. Может быть кто-нибудь знает что это означает и как работает?
Это указатель на указатель
Это нужно если необходимо постоянно выделять освобождать память.

void f(unsigned char** ptr){
*ptr = new unsigned char[32];}

f(&NAME);

Ведь в параметры значения копируются и в функции создаётся локальная копия
По этому можно использовать указатель на указатель.
Almir Galiev
Almir Galiev
30 074
Лучший ответ
Например, ты создаешь двумерный динамический массив символов. Его создают как одномерный массив одномерных массивов символов. Для каждого одномерного массива выделяется память и выдается указатель на ее начало. А чтобы у тебя получился массив этих одномерных массивов, эти указатели должны быть тоже расположены в массиве, значит, тебе понадобится сначала создать динамический массив указателей, на начало которого будет указывать указатель на массив из этих указателей. Вот указатель на массив указателей и обозначается как char** Name, потому что в Name хранится адрес начала массива адресов символов. Чтобы добраться до символа, нужно будет разыменовать сначала Name, чтобы получить указатель с адресом начала одномерного массива символов, а потом уже разыменовать этот указатель, чтобы получить символ в этом одномерном массиве. Так что char получается в результате проведенного дважды разыменования Name, что и отражено в обозначении типа char** Name, показывающего, что нужно сделать с Name, чтобы получить char.
Timur Abdiev
Timur Abdiev
81 371
stackoverflow.com/a/87648
c4learn.com/c-programming/c-double-pointer
МД
Макс Ддд
34 259
unsigned значит без знака число

unsigned char NAME[x][y];

x,y выделяются динамически
Роман Сидоров не совсем поняла, а звездочки для чего?
Вот хорошая статья про указатели и для чего они нужны.
https://habrahabr.ru/post/256443/
Вадим Дю
Вадим Дю
908