Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не ясность с указателем, не ясность с указателем 
:(
    Опции темы
hawk3500
Дата 22.6.2012, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Доброго времени суток.
Поясните пожалуйста,в чём разница между двумя следующими кусками кода:
Код

double *X=new double[Z];
char *Temp=new char[N];
double *Test=(double*)Temp;
memcpy(Test,&X[y],Z);
Test=(double*)&Test[k];
memcpy(Test,&X[y],Z);

и
Код

double *X=new double[Z];
char *Temp=new char[N];
double *Test=(double*)Temp;
memcpy(Test,&X[y],Z);
Test+=k;
memcpy(Test,&X[y],Z);


Собственно в чём разница между:
Test=(double*)&Test[k];
и
Test+=k;

Заранее благодарен.
--------------------
воин dzen'a
PM MAIL   Вверх
volatile
Дата 22.6.2012, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(hawk3500 @  22.6.2012,  18:42 Найти цитируемый пост)
Собственно в чём разница между:
Test=(double*)&Test[k];
и
Test+=k;


hawk3500, поскольку Test это указатель на double, то никакой разницы.

походу, приведение в первом случае лишнее. т.е. Test=(double*)&Test[k];
и это тоже самое что Test+=k;

Вообще весь код в целом смысла не имеет:
Цитата(hawk3500 @  22.6.2012,  18:42 Найти цитируемый пост)

memcpy(Test,&X[y],Z);
 здесь идет использование неинициализированного массива X.

И путаница с переменной Z:
Цитата(hawk3500 @  22.6.2012,  18:42 Найти цитируемый пост)
double *X=new double[Z];
Цитата(hawk3500 @  22.6.2012,  18:42 Найти цитируемый пост)
memcpy(Test,&X[y],Z);
В начале это размер массива X в даблах, во втором количество копирумеых байт (в чарах).


Короче, не видя контекста, в котором это используется, предположу что это бред...

PM MAIL   Вверх
hawk3500
Дата 23.6.2012, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Извеняюсь за путоницу.
Разницы то особо и никакой, а вот по факту программа отрабатывает нессколько иначе.
Код

DWORD FFT_SIZE=65536; 
cufftComplex *Test,*Tmp_Point;
cufftComplex *Varius_Array=new cufftComplex[FFT_SIZE+1];
char *Res=new char[FFT_SIZE*sizeof(cufftComplex)+1];
DWORD Part=FFT_SIZE/2;
cudaMalloc((void **)&Test,FFT_SIZE*sizeof(cufftComplex)+1)
/*
считаю БПФ.
*/

cudaMemcpy(Varius_Array,Test,FFT_SIZE*sizeof(cufftComplex),cudaMemcpyDeviceToHost);

Tmp_Point=(cufftComplex*)Res;
memcpy(Tmp_Point,&Varius_Array[Part],Part*sizeof(cufftComplex));
Tmp_Point=(cufftComplex*)&TmpPoint[Part];
memcpy(Tmp_Point,&Varius_Array[0],Part*sizeof(cufftComplex));
/*
Вышеприведённый участок кода выдаёт результат отличный от вот этого кода:

Tmp_Point=(cufftComplex*)Res;
memcpy(Tmp_Point,&Varius_Array[Part],Part*sizeof(cufftComplex));
Tmp_Point+=Part;
memcpy(Tmp_Point,&Varius_Array[0],Part*sizeof(cufftComplex));

И результат выполнения последнего кода правильный(результат в массиве Res).
*/


Вот почему результаты разные понять не могу.
Заранее благодарен.
С уважением,
HAWK3500.

Это сообщение отредактировал(а) hawk3500 - 23.6.2012, 01:28
--------------------
воин dzen'a
PM MAIL   Вверх
volatile
Дата 23.6.2012, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(hawk3500 @  23.6.2012,  01:28 Найти цитируемый пост)
Tmp_Point=(cufftComplex*)&TmpPoint[Part];

Здесь переменной Tmp_Point присваивается адрес какого-то левого массива TmpPoint
Ни декларации, ни определения которого в приведенном коде вообще нет.

И еще раз, уберите приведение!!! Приведением вы затыкаете попытки компилера указать вам на ошибки.

PM MAIL   Вверх
hawk3500
Дата 23.6.2012, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 6.2.2009

Репутация: нет
Всего: 2



Убрал приведения.
Исправил.
Tmp_Point=&Tmp_Point[Part];
результат тотже
--------------------
воин dzen'a
PM MAIL   Вверх
volatile
Дата 23.6.2012, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(hawk3500 @  23.6.2012,  16:41 Найти цитируемый пост)
результат тотже 

Что заменили переменную, и результат тот-же?   smile  
У вас вероятно ошибка где-то в другом месте. Возможно код вообще не доходит до приведенного фрагмента.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5212 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.