У меня есть байтовый буфер, назовем его 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);
Я считаю, что первый вариант самый простой, но я нахожу синтаксис указателя немного запутанным.
buffer + pos
— это адрес, по которому хранится значениеbuffer[pos]
. Написание&(buffer[pos])
эквивалентноbuffer + pos
. Написаниеbuffer[pos]
эквивалентно*(buffer + pos)
. - person pmg   schedule 02.08.2020