В C функция memset () используется для установки однобайтового значения в блок памяти побайтно. Эта функция полезна для побайтовой инициализации блока памяти определенным значением. В этой статье мы подробно рассмотрим, как можно использовать эту функцию. Итак, приступим.
Заголовочный файл:
1 | нить.час |
Синтаксис:
1 | void * memset (void * str, int ch, size_t n) |
Эта функция устанавливает первый п байтов блока памяти, указанного ул от ch.
Аргументы:
Функция принимает 3 аргумента:
- ул: Это указатель на ячейку памяти, где будет установлена память. Это указатель void, поэтому мы можем установить любой тип блока памяти, но память будет устанавливаться побайтно.
- ch: Это значение, которое нужно скопировать в блок памяти. Это целочисленное значение, но перед копированием оно преобразуется в беззнаковый символ.
- п: Это количество байтов в блоке памяти, которое установлено.
Возвращаемые значения:
memset () возвращает первый адрес блока памяти, с которого начинается установка значения.
Примеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Пример1.c #включать #включать int main () char str [30] = "ABCD EFGH"; printf ("Перед memset =>% s", str); memset (str, 'х', 3); printf ("\ nПосле memset =>% s \ n", str); возврат 0; |
В Example1.c, мы объявили один символьный массив размером 30. Затем мы инициализировали его строкой «ABCD EFGH.”В функции memset мы передали 3 аргумента str, 'x' и 3. Таким образом, блок памяти, на который указывает str, будет сбрасывать первые 3 символа на 'x.'После memset, когда мы распечатываем память, мы получим «xxxD EFGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Пример2.c #включать #включать int main () char str [30] = "ABCD EFGH"; printf ("Перед memset =>% s", str); memset (str + 4, 'x', 3); printf ("\ nПосле memset =>% s \ n", str); возврат 0; |
В Example2.c, мы передали str + 4 в функцию memset. Итак, он сбрасывает память после 4-го места str. После memset, когда мы распечатываем память, мы получим «ABCDxxxGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Example3.c #включать #включать int main () int arr [5], i; memset (arr, 10,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); для (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ п"); возврат 0; |
В Example3.c, мы объявили целочисленный массив размером 5 и пытаемся инициализировать его 10. Но из вывода мы увидели, что массив не инициализирован 10; вместо этого мы получили значение «168430090». Это связано с тем, что целочисленное значение больше одного байта, и функция memset преобразует значение в беззнаковый символ перед копированием. Теперь посмотрим, как мы получим значение «168430090».
Двоичное представление 10 - это 00000000 00000000 00000000 00001010.
Когда целое число преобразовано в беззнаковый символ, считается, что младший 1 байт. Итак, когда 10 конвертируется в unsigned char, это двоичное представление 00001010.
Функция memset () устанавливает байтовую ячейку памяти. Итак, всего 4 байта будут: 00001010 00001010 00001010 00001010.
Десятичное значение двоичного представления 4 байтов - 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Example4.c #включать #включать int main () int arr [5], i; memset (arr, 0,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); для (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ п"); возврат 0; |
В примере 4.c, мы инициализировали целочисленный массив значением 0. Все биты двоичного представления 0 равны 0. Таким образом, массив инициализируется 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Пример5.c #включать #включать int main () int arr [5], я; memset (arr, -1,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); для (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ п"); возврат 0; |
В примере 5.c, мы инициализировали целочисленный массив значением 0. Все биты двоичного представления -1 равны 1. Итак, массив инициализируется -1.
Заключение:
В этой статье мы увидели, используя функцию memset, как мы можем эффективно инициализировать или установить значение блока памяти. Мы можем установить любой символ и 0 или -1 как целочисленное значение для блока памяти. Функция Memset быстрее устанавливает большой кусок непрерывной памяти по сравнению с простой установкой местоположения с помощью цикла.