начальное значение международного массива в C

Вам не нужно, если сделать это, взглянуть на следующий код:

tags.py

@register.simple_tag
def active(request, pattern):
    import re
    if re.search(pattern, request.path):
        return 'active'
    return ''

urls.py

urlpatterns += patterns('',
    (r'/ 

base.html

{% load tags %}

{% url 'home_url_name' as home %}
{% url 'services_url_name' as services %}
{% url 'contact_url_name' as contact %}


вот именно. для реализации детали взглянули на:
gnuvince.wordpress.com
110j.wordpress.com

, view_home_method, 'home_url_name'), (r'/services/

base.html

{% load tags %}

{% url 'home_url_name' as home %}
{% url 'services_url_name' as services %}
{% url 'contact_url_name' as contact %}


вот именно. для реализации детали взглянули на:
gnuvince.wordpress.com
110j.wordpress.com

, view_services_method, 'services_url_name'), (r'/contact/

base.html

{% load tags %}

{% url 'home_url_name' as home %}
{% url 'services_url_name' as services %}
{% url 'contact_url_name' as contact %}


вот именно. для реализации детали взглянули на:
gnuvince.wordpress.com
110j.wordpress.com

, view_contact_method, 'contact_url_name'), )

base.html

{% load tags %}

{% url 'home_url_name' as home %}
{% url 'services_url_name' as services %}
{% url 'contact_url_name' as contact %}


вот именно. для реализации детали взглянули на:
gnuvince.wordpress.com
110j.wordpress.com

43
задан buzali 12 September 2009 в 03:45
поделиться

7 ответов

Если массив объявлен в функции, значение не определено. int x [10]; в функции означает: принять во владение область memroy размером 10 int без выполнения какой-либо инициализации. Если массив объявлен как глобальный или как static в функции, то все элементы инициализируются нулевым значением, если они еще не инициализированы.

61
ответ дан 26 November 2019 в 22:36
поделиться

Почему локальные переменные функции ( auto класс хранения) не инициализируются, когда все остальное есть?

C близок к оборудованию; в этом его величайшая сила и самая большая опасность. Причина, по которой объекты класса хранилища auto имеют случайные начальные значения, заключается в том, что они размещены в стеке, и было принято дизайнерское решение не очищать их автоматически (отчасти потому, что их нужно очищать при каждом вызове функции) .

С другой стороны, объекты, не являющиеся auto , нужно очистить только один раз. Кроме того, ОС в любом случае должна очищать выделенные страницы из соображений безопасности. Таким образом, дизайнерское решение здесь заключалось в том, чтобы указать нулевую инициализацию. Почему безопасность стека тоже не проблема? Собственно, сначала это очищено. Мусор, который вы видите, происходит от более ранних экземпляров фреймов вызовов вашей собственной программы и кода библиотеки, который они вызвали.

Конечным результатом является быстрый код с эффективным использованием памяти. Все преимущества сборки безболезненны. До того, как dmr изобрел C, HLL, такие как Basic, и целые ядра ОС были действительно, буквально, реализованы как гигантские программы на ассемблере. (За некоторыми исключениями в таких местах, как IBM.)

12
ответ дан 26 November 2019 в 22:36
поделиться

В соответствии со стандартом, все глобальные и функциональные статические переменные автоматически инициализируются значением 0. Автоматические переменные не инициализируются.

int a[10];  // global - all elements are initialised to 0

void foo(void) {
    int b[10];    // automatic storage - contain junk
    static int c[10]; // static - initialised to 0
}

Однако рекомендуется всегда вручную инициализировать функциональную переменную, независимо от своего класса хранения. Чтобы установить для всех элементов массива значение 0, вам просто нужно присвоить первому элементу массива значение 0 - пропущенные элементы автоматически установятся на 0:

int b[10] = {0};
20
ответ дан 26 November 2019 в 22:36
поделиться

Текст из http://www.cplusplus.com/doc/tutorial/arrays/

РЕЗЮМЕ:

Инициализация массивов. При объявлении обычный массив локальной области видимости (в пределах функция, например), если мы не укажите иначе, его элементы будут не инициализироваться никаким значением по умолчанию, поэтому их содержимое будет неопределенный, пока мы не сохраним какое-то значение в них. Элементы глобального и статические массивы, с другой стороны, автоматически инициализируется их значения по умолчанию, которые для всех основные типы это означает, что они заполнены нулями.

В обоих случаях, локальных и глобальных, когда объявляем массив, у нас есть возможность присвоения начальных значений к каждому из его элементов заключая значения в фигурные скобки {}. Например:

 int billy [5] = {16, 2, 77, 40, 12071};
3
ответ дан 26 November 2019 в 22:36
поделиться

Согласно стандарту C, 6.7.8 (примечание 10):

Если объект с автоматическим продолжительность хранения не инициализирована явно его значение неопределенный.

Так что это зависит от компилятора. При использовании MSVC отладочные сборки будут инициализировать автоматические переменные с помощью 0xcc, тогда как сборки без отладки не будут инициализировать эти переменные вообще.

7
ответ дан 26 November 2019 в 22:36
поделиться

В большинстве последних компиляторов (например, gcc / vc ++) частично инициализированные элементы локального массива / структуры по умолчанию инициализируются нулем (int), NULL (char / char string), 0.000000 (float / double).

Помимо данных локального массива / структуры, как указано выше, элементы статического (глобального / локального) и глобального пространства также поддерживают одно и то же свойство.

int a[5] = {0,1,2};
printf("%d %d %d\n",*a, *(a+2), *(a+4));

struct s1
{
int i1;
int i2;
int i3;
char c;
char str[5];
};

struct s1 s11 = {1};
    printf("%d %d %d %c %s\n",s11.i1,s11.i2, s11.i3, s11.c, s11.str);
    if(!s11.c)
        printf("s11.c is null\n");
    if(!*(s11.str))
        printf("s11.str is null\n");

В gcc / vc ++ вывод должен быть:

0 2 0 1 0 0 0,000000 s11.c имеет значение null s11.str имеет значение null

4
ответ дан 26 November 2019 в 22:36
поделиться

Объявление переменной AC просто указывает компилятору выделить и назвать область памяти за вас. Для автоматических переменных, также известных как переменные стека, значения в этой памяти не изменяются по сравнению с прежними. При запуске программы глобальные и статические переменные устанавливаются в ноль.

Некоторые компиляторы в неоптимизированном режиме отладки устанавливают автоматические переменные в ноль. Однако в более новых компиляторах стало обычным делом устанавливать значения на заведомо неверные значения, чтобы программист не сам неосознанно не писал код, зависящий от установленного нуля.

Чтобы попросить компилятор установить массив в ноль. для вас вы можете написать это как:

int array[10] = {0};

Еще лучше установить массив со значениями, которые он должен иметь. Это более эффективно и позволяет избежать двойной записи в массив.

5
ответ дан 26 November 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: