Mypy: тип `mypy` для объекта` Bytes` Tensorflow TFRecords

Короткий ответ

Адрес указателя будет увеличен на sizeof(T), где T - тип, на который указывает. Таким образом, для int указатель будет увеличен на sizeof(int).

Почему?

Ну, в первую очередь, стандарт требует этого. Причина, по которой это поведение полезна (кроме совместимости с C), заключается в том, что, когда у вас есть структура данных, которая использует непрерывную память, например массив или std::vector, вы можете перейти к следующему элементу массива, просто добавив один к указателю. Если вы хотите перейти к n-му элементу в контейнере, вы просто добавите n.

Возможность писать firstAddress + 2 намного проще, чем firstAddress + (sizeof(T) * 2), и помогает предотвратить ошибки, возникающие у разработчиков, предполагающих sizeof(int) 4 (это может быть не так) и писать код, как firstAddress + (4 * 2).

На самом деле, когда вы говорите myArray[4], вы говорите myArray + 4. Это причина, по которой индексы массивов начинаются с 0; вы просто добавляете 0, чтобы получить первый элемент (т. е. myArray указывает на первый элемент массива) и n, чтобы получить n-й.

Что делать, если я хочу переместить один байт за раз?

sizeof(char) гарантированно будет иметь один байт, поэтому вы можете использовать char*, если хотите переместить один байт за раз.

1
задан krishnab 14 March 2019 в 00:59
поделиться