2013-11-21 167 views
0

我想了解的C代碼,(SimpleScalar的,bpred.c),有可能混淆了我很多的東西:指針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的指針,因此*shiftregsint

由於calloc保證它分配內存設置爲0,你已經分配足夠的內存來指shiftregs[0]l2index0(假設calloc沒有失敗,並返回NULL)。

1

正在使用calloc()函數來分配一個可以通過指針shiftregs引用的歸零整數的動態數組。

l2index中的值將爲零,除非分配失敗(calloc()返回NULL)。如果分配失敗,則調用未定義的行爲;任何事情都可能發生,但是你的程序可能會崩潰。檢查分配,使其不會崩潰!

0

l2index是0. calloc將存儲器設置爲零。以下是在Linux程序員手冊:

釋放calloc()爲每個大小 字節nmemb個元素的數組分配內存,並返回一個指針分配的內存。內存 設置爲零。如果nmemb或size是0,那麼calloc()返回 NULL或一個唯一的指針值,以後可以成功地將 傳遞給free()。

0

檢查calloc()是否返回NULL。 如果是這樣,「l2index = shiftregs [l1index];」將崩潰,因爲您嘗試從NULL點(shiftregs)獲取值。 如果不是,他們說l2index會是0.