Как занулить все элементы массива с
Перейти к содержимому

Как занулить все элементы массива с

  • автор:

Обнуление массива в Си

Как правильно обнулить массив? Речь о любых типах массива, будь то символьный, целочисленный, динамический и т.п Если способов несколько то желательно написать как можно больше.

Способ, который изучен мною выглядит как — то так:

Но я не знаю является ли такой метод обнуления верным, с технической точки зрения и с точки зрения процедурного программирования и объектно-ориентированного программирования.

Ответы (1 шт):

Если вам нужно обнуление при объявлении — да, это совершенно верный способ. Для глобального массива не нужно и это.

Если нужно обнулить уже имеющийся массив — берите для этого memset . Например,

обнулить массив в C

Как наиболее правильно обнулить массив данных в C? Чтобы был обнулен не только первый элемент, но достоверно стерлись и все остальные.

Re: обнулить массив в C

char a[100]; memset (a, 0, sizeof(a));

Re: обнулить массив в C

и не забывай продвинутые виндовуз компиляторы
при оптимизации просто
пропускают оператор memset(a,0,sizeof(a));
что делает gcc Хз )

PS: опять все приходиться делать вручную (((

Re: обнулить массив в C

С какого это перепоя? Если действительно есть такой компилятор, то это его глюк, а не оптимизация. Такое ощущение, что ты спутал 2 вещи:
— Просто выкинуть нафиг вызов memset.
— Вместо вызова memset использовать встроенный код (rep stosd или типа того). Т.е. по сути — тот же memset, но без накладных расходов на push+call+ret+add.

Re: обнулить массив в C

А ещё есть bzero. (может оно эфективнее будет)

Re: обнулить массив в C

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

Re: обнулить массив в C

char a[100]=<0>; Работает классно! И не надо выдрючиваться.

Re: обнулить массив в C

char a[100]=<0>; Работает классно! И не надо выдрючиваться.

Re: обнулить массив в C

2 kkk.
Такое ощущение, что в этом случае обнулится только a[0].
И потом, это работает только один раз. После того, как ты чего-то записал в `a’, а затем решил его обнулить, `a=<0>;’ вообще не прокатит.

Re: обнулить массив в C

2nobody:
kkk прав, при инициализации массива, элементам "не хватившим " значений — инициализируются неявно \0. Для случая
char a[100] = < 0 >
a[0] — явно инициализируется 0-м
a[1]-a[99] — неявно инициализируются 0-м

ps: аналогичным образом можно инициализировать и структуры.
pss: все это есть в стандарте.

Re: Re: обнулить массив в C

>2nobody: >kkk прав, при инициализации массива, элементам "не хватившим " >значений — инициализируются неявно \0. Для случая >char a[100] = < 0 >>a[0] — явно инициализируется 0-м >a[1]-a[99] — неявно инициализируются 0-м

>ps: аналогичным образом можно инициализировать и структуры. >pss: все это есть в стандарте.

——————— все что выше вранье. и зависит от компилятора но не факт покажы где есть в стандарте. используй memset

How do I clear a C++ array?

How do I clear/empty a C++ array? Theres array::fill , but looks like its C++11 only? I am using VC++ 2010. How do I empty it (reset to all 0)?

7 Answers 7

Assuming array is a normal array (e.g. int[] )

Assuming a C-style array a of size N , with elements of a type implicitly convertible from 0 , the following sets all the elements to values constructed from 0 .

Note that this is not the same as «emptying» or «clearing».

Edit: Following james Kanze’s suggestion, in C++11 you could use the more idiomatic alternative

In the absence of C++11, you could roll out your own solution along these lines:

Как обнулить элементы массива, когда мой компилятор не соответствует стандарту

Мой компилятор (С++ Builder6) синтаксически разрешает инициализацию члена массива (по крайней мере, с нулем), но на самом деле он этого не делает. Таким образом, утверждение в приведенном ниже примере терпит неудачу в зависимости от контекста.

Изменение компилятора в данный момент не является опцией. Мой вопрос: какой будет лучший способ «восстановить» этот недостаток в отношении будущей мобильности и стандартного соответствия?

Edit: Как оказалось, мой первый пример был слишком коротким. Он пропустил точку, что уровень заполнения массива настолько важен, что он должен храниться очень близко к массиву, который есть: в том же классе.

Даже если исходная проблема остается, мой фактический шаблон проблемы обычно таков:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *