инкрементный массив с плавающей точкой ptr - PullRequest
0 голосов
/ 05 сентября 2010

Я пытаюсь переместить массив чисел с плавающей запятой на 256 «единиц» с самого начала (256 * 4 байта) для чисел с плавающей запятой. Я получаю сообщение об ошибке компиляции.

long new_capture_length = 4096;
long step_size = 256;
float data[new_capture_length];
data+=step_size;

ошибка: недопустимые операнды в двоичном + (имеют «float [(long unsigned int) (new_capture_length)]» и «float *»)

Как мне этого добиться?

Ответы [ 3 ]

4 голосов
/ 05 сентября 2010

Вы не можете "переместить" массив. Вы можете переместить указатель в массив , например:

long new_capture_length = 4096;
long step_size = 256;
float data[new_capture_length];
float* p_data = &data[0];

p_data+=step_size; /* p_data now points 256 floats into data, i.e. to data[256]  */

Но местоположение самого data никогда не может быть изменено, поскольку оно не является указателем.

Недавно я дал несколько более подробный ответ на очень похожий вопрос: Вопрос с указателем C (мне не нравится называть вопросы типа «что не так с этим кодом» точными дубликатами, даже если у них есть та же самая основная проблема).

0 голосов
/ 05 сентября 2010

Массивы могут использоваться в качестве указателей в некоторых случаях, но не во всех.Это тот, где вы не можете.Вы не можете «перемещать» массив, как вы можете указатель.Вы должны либо сказать float* ptr = data + step size (если вам нужен только указатель), либо использовать memmove для перемещения всего массива.

0 голосов
/ 05 сентября 2010

Вы можете использовать memmove () для перемещения данных, если это то, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...