C — Де-чередование данных

#c #sorting #double-pointer

#c #сортировка #двойной указатель

Вопрос:

В программе на C у меня есть два двойных указателя на некоторые данные с плавающей запятой:

 float **source;
float **dest;
  

Во время выполнения размеры заданы и идентичны. Я хочу скопировать данные из источника в dest, но исходные данные чередуются, и я хочу, чтобы dest был копией данных без чередования. Таким образом, источник может выглядеть как:

 1 5 2 6 3 7 4 8
  

и при копировании я хочу, чтобы dest выглядел как:

 1 2 3 4 5 6 7 8
  

Если бы я знал размер данных во время компиляции, я мог бы создавать массивы размеров MxN и NxM, но я этого не делаю. Часть моего мозга «указатель C» не использовалась годами и довольно ржавая. Любая помощь была бы высоко оценена.

Комментарии:

1. Если речь идет о транспонировании матрицы и вы можете работать с одномерными массивами, существует простая формула.

2. Вы читали раздел 6 часто задаваемых вопросов на comp.lang.c ?

3. источник и dest — это указатели, а не числа, поэтому они не могут выглядеть так, как вы описываете. Они указывают на некоторую память, которая содержит указатели на другую память, и эта другая память содержит числа. Итак, без описания того, как выглядят эти промежуточные указатели (и сколько их), ваш вопрос не имеет смысла.

4. Вы имеете в виду, что у вас есть два массива с плавающими значениями и что вы не знаете размер ни одного из массивов до времени выполнения?

Ответ №1:

Вы можете использовать sizeof() оператор для того, чтобы узнать размер любой переменной. Если вы хотите выполнить динамическое выделение памяти во время выполнения, используйте malloc() функцию в C.

Если вы используете C , вы можете использовать new оператор.