Является ли массив + индекс эквивалентным адресу массива по индексу?

У меня есть байтовый буфер, назовем его buf. Он объявляется следующим образом:

char *buffer = NULL;
/* do_some_stuff */
size_t buffer_size = n; // n is the output of do_some_stuff
size_t bytes_to_be_copied = m; // m is another output of do_some_stuff
buffer = malloc(buffer_size * sizeof (char));
char *dest = malloc(bytes_to_be_copied * sizeof (char));

Теперь мне нужно получить доступ к набору значений и скопировать его в структуру данных, поэтому я решил использовать memcpy. Однако данные, которые я хочу скопировать, начинаются не с buffer[0], а с buffer[pos].

Поэтому я решил использовать следующее:

memcpy(dest, buffer+pos, bytes_to_be_copied);

Я хотел понять, что buffer+pos — это адрес, по которому хранится значение buffer[pos], верно?

Можем ли мы также сделать что-то вроде:

memcpy(dest, &(buffer[pos]), bytes_to_be_copied);

Или альтернативно:

char **pos_addr = &(buffer[pos]);
memcpy(dest, *pos_addr, bytes_to_be_copied);

Я считаю, что первый вариант самый простой, но я нахожу синтаксис указателя немного запутанным.


person gny-001f2    schedule 02.08.2020    source источник
comment
Да, buffer + pos — это адрес, по которому хранится значение buffer[pos]. Написание &(buffer[pos]) эквивалентно buffer + pos. Написание buffer[pos] эквивалентно *(buffer + pos).   -  person pmg    schedule 02.08.2020