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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> memset 
:(
    Опции темы
bsa
Дата 24.2.2010, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Syltan, представь себе, что память это одномерный массив байт. Указатель - это смещение от начала этого массива к конкретному месту, с которого располагается некий кусок данных. Если memset передать это смещение в качестве первого параметра, 0 в качестве второго, и 10 в качестве 3-го, то она заполнит нулями 10 байт начиная с переданного смещения.
PM   Вверх
Syltan
Дата 24.2.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

memset(&salo,0,sizeof(50));


Это означает что переменная salo,  хранит в себе число состоящее из 50 байт, 
и это число все нули?

PM MAIL   Вверх
andrew_121
Дата 24.2.2010, 16:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

Репутация: 10
Всего: 33



Цитата(Syltan @  24.2.2010,  16:00 Найти цитируемый пост)
Это означает что переменная salo,  хранит в себе число состоящее из 50 байт, 
и это число все нули?

 smile  smile

Добавлено через 1 минуту и 54 секунды
bsa, бесполезно.
таких вопросов, спустя столько написанных постов, я еще не встречал.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 24.2.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Syltan,  smile  smile  smile 

начнем с того, что это вообще по идее скомпилироваться не должно. Так как sizeof(50) (сколько байт занимает в памяти число 50 ты хоть сам знаешь?) ничего не сможет вернуть. 
Но даже если бы ты написал memset(&salo, 0, 50), что имеет больше смысла, то это еще не говорит о том, что переменная salo имеет размер 50. Ты вообще перепутал следствие с причиной. Обычно, пишут так: memset(&salo, 0, sizeof(salo)), где salo - зануляемая переменная (не указатель на нее). В твоем же случае, если размер salo меньше 50, то выполнение этой команды приведет не неопределенному поведению программы (скорее всего, это будет просто крах).

Это сообщение отредактировал(а) bsa - 24.2.2010, 16:53
PM   Вверх
lBugl
Дата 24.2.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



memset(p1,p2,p3);
и так))  
р1 -- это адрес в памяти
р2 -- значение которое будем записывать в память
р3 -- количество байт которым будем присваивать значение р2 начиная с р1

как массив, всё правильно объясняли.
к примеру память 1 2 3 4 5 6 7 8 9....
делаем memset(3, 0, 4);
начало памяти считаем с 0-ым индексом т.е. начинается с нуля.
получается память с таким содержимым 1 2 3 0 0 0 0 8 9....

терь по поводу первого параметра. &n -- это не значение переменной, это адрес памяти где она находится. //на сколько я помню =)
проще врядле смогу объяснить...
зы: советую посмотреть операции * и & в си...


Это сообщение отредактировал(а) lBugl - 24.2.2010, 17:46
PM MAIL   Вверх
Sosed
Дата 24.2.2010, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добавим иллюстрации
user posted image
Код

struct {
  int x;
  int y;
  int fuel;
} t34, tz4;
t34.x = 4;
t34.x = 3;
t34.x = 20;
...


ну собственно 
memset(&t34, 0, sizeof(t34)) :
&t34 = 0x0012FE94
sizeof(t34) = 12
После, в ячейках 0x0012FE94, 0x0012FE95, ... , 0x0012FEA5 будут нули, соответственно значения x, y и fuel = 0. Тут структура без дыр.

PM MAIL   Вверх
xvr
Дата 26.2.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Syltan @ 24.2.2010,  16:00)
Код

memset(&salo,0,50);


Это означает что переменная salo,  хранит в себе число состоящее из 50 байт, 
и это число все нули?

После memset - безусловно  smile 
 smile 
- Я изобрел автомат для бритья.
- А как он действует?
- Клиент сует голову в отверстие, и 2 бритвы внутри автомата его бреют
- Но у всех же свой профиль лица!
- Ну. в первый раз, да .....

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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