Форум программистов, компьютерный форум CyberForum.ru

Указатель - C++

Восстановить пароль Регистрация
 
sitesv
24 / 22 / 2
Регистрация: 22.04.2010
Сообщений: 654
19.04.2012, 16:55     Указатель #1
C++
1
2
3
4
5
6
7
unsigned short b=0xffff;
char *a=malloc(65536);
for(int i=0;i<65536;i+=2)
{
     *(a+i)=b;
}
free(a);
Добрый день!
Создал указатель на область памяти.
Хочу по указателю записывать сразу двухбайтовую переменную.
Что-то мне подсказывает, что я делаю что-то не так...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2012, 16:55     Указатель
Посмотрите здесь:

C++ Функция принимает указатель на void и возвращает указатель на int
Указатель или ссылка на указатель. В чем разница? C++
C++ Преобразовать указатель одного типа в указатель другого.
Приведение любого двумерного массива к типу указатель на указатель C++
Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
19.04.2012, 17:10     Указатель #2
Цитата Сообщение от sitesv Посмотреть сообщение
*(a+i)=b;
В результате вычислений в левой части получается char, соответственно b к приведётся к этому типу с потерей данных.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 17:25     Указатель #3
попробуй
C
1
2
for(int i=0;i<65536;i+=2)
*(    (unsigned short*)(a+i)  )=b;
или
C
1
2
for(int i=0;i<32768;i++)
*(    ((unsigned short*)a)+i )=b;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
19.04.2012, 17:29     Указатель #4
Мало того, можно весь массив оптом заполнить
C
1
2
3
#include <string.h>
/*...*/
memset(a, 0xff, 65536);
Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
попробуй
сначала посчитается a+i, за тем приведётся к unsigned short * и на последней итерации удачно вылетит за границу массива.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 17:35     Указатель #5
Цитата Сообщение от easybudda Посмотреть сообщение
сначала посчитается a+i, за тем приведётся к unsigned short * и на последней итерации удачно вылетит за границу массива.
с какого перепуга? последняя итерация i=65534
sitesv
24 / 22 / 2
Регистрация: 22.04.2010
Сообщений: 654
19.04.2012, 17:39  [ТС]     Указатель #6
Получается, что сделать я должен что-то такое:
Unsigned short *a=malloc(32768*sizeof(unsigned short));
For(int i=0;i<32768;i++)
{
*(a+i)=b;
}
Free(a);

Я правильно все понял?
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,945
19.04.2012, 17:41     Указатель #7
угу, а a[i] - для слабаков ?)
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.04.2012, 17:42     Указатель #8
ну дык,
а можно вообще a[i]=b;
или memset, да
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2012, 18:08     Указатель
Еще ссылки по теме:

Расскажите, как здесь работает указатель на указатель? C++
Почему указатель на указатель объявляется как float **A; C++
C++ Как правильно удалять выделенную память под указатель на указатель?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
sitesv
24 / 22 / 2
Регистрация: 22.04.2010
Сообщений: 654
19.04.2012, 18:08  [ТС]     Указатель #9
Т.е в памяти будут выделен 0..65535 диапазон байт и заполнять мы память будем по 2 байта за раз?
Yandex
Объявления
19.04.2012, 18:08     Указатель
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru