2013-11-21 3 views
0

Я пытаюсь понять, кесарев код, (SimpleScalar, bpred.c), то это то, что меня смущает много:Является ли функция calloc calloc вектором указателя? (Язык C)

int *shiftregs; 
    shiftregs = calloc(1, sizeof(int)); 

    int l1index, l2index; 
    l1index = 0; 
    l2index = shiftregs[l1index]; 

удаляет код, который может не помочь. После вызова calloc*shiftregs становится массивом указателей? И каково значение l2index? Большое спасибо!

+0

Что вы подразумеваете под "указательным вектором"? Нет такой вещи в C. –

+0

извините, я имею в виду указательный массив – Yaolong

+0

'* shiftregs' является' int'. 'shiftregs' является указателем на' int'. «Int *» может указывать на первый элемент массива 'int'. –

ответ

1

С shiftregs является указателем на int, *shiftregs является int.

calloc Поскольку гарантии, что память выделяет устанавливается на 0, и вы выделены достаточно памяти для обозначения shiftregs[0], l2index будет 0 (при условии, calloc не преминул и возврата NULL).

1

Функция calloc() используется для выделения динамического массива нулевых целых чисел, на которые можно ссылаться с помощью указателя shiftregs.

Значение в l2index будет равно нулю, если распределение не было выполнено (calloc() возвращено NULL). Если выделение не удалось, вы вызываете неопределенное поведение; все может случиться, но ваша программа, вероятно, потерпит крах. Проверьте распределение, чтобы оно не сработало!

0

l2index is 0. calloc установить память в ноль. Ниже Руководство программиста Linux:

calloc() выделяет память для массива nmemb элементов размером байт каждый, и возвращает указатель на выделенную память. Память установлена ​​на ноль. Если nmemb или size равно 0, calloc() возвращает либо NULL, либо уникальное значение указателя, которое впоследствии может быть успешно выполнено передано в free().

0

Проверьте, не вызвал ли calloc() NULL. Если это так, произойдет сбой «l2index = shiftregs [l1index];», поскольку вы пытаетесь получить значение из NULL-точки (shiftregs). Если нет, то, как они сказали, l2index будет 0.