Дорогие программисты! Я не студент. Я изучаю Си++ ради собственного интереса, так сказать люблю все знать )), и вданный момент читаю книгу Эккеля по Cи++. Столкнулся в книге с такой задачей:
Определите массив типа int. Получите начальный адрес массива и приведите его к типу void* при помощи оператора static_cast. Напишите функцию, в аргументах которой передаются void*, число (количество байтов) и значение. Функция должна присваивать передаваемое значение каждому байту в заданном интервале.
Решил первую часть:
int m1[10];
cout<<"Adress m: "<<(long) m1<<endl;
void* m2=static_cast<void*>(m1);
Не могу написать функцию ))
и почему каждому байту когда размер m2 4 байта. Если это даже глупый вопрос, подскажите хотя бы как найти ответ ))
Вы как-то странно берете адрес первого элемента массива. Первый элемент - это m1[0], его адрес &m1[0]. В принципе, это делать необязательно, так как в С++ есть стандартное неявное приведение (standard implicit cast) имя массива к указателю на первый элемент с индексом 0.
В первой части задачи Эккель хочет, чтобы вы написали static_cast<void*>(m1)
Вторая часть должна выглядеть так:
void fill(void* void_ptr, size_t count, unsigned char value) {
unsigned char * ptr = static_cast<unsigned char*>(void_ptr);
for (size_t i = 0; i < count; i++) {
ptr[i] = value;
}
}