2013-03-30 142 views
3

我對C非常陌生,所以我確信這很容易。全局變量空功能

我試圖在頭文件中聲明array[10]的分數,並在我的example.c文件中將其定義爲靜態變量。我在我的函數init_heap()中初始化它。但是,該函數返回時數組的所有元素都爲null。我如何正確地做到這一點?我需要對myArray進行更改。

頁眉片段:

struct fraction 
{ 
    signed char sign; 
    unsigned int numerator; 
    unsigned int denominator; 
}; 

extern struct fraction *myArray[10]; 

example.c:提前

//includes... 

static struct fraction *myArray[10]; 


void init_heap() 
{ 
    struct fraction myArray[] = { 
     {0,0,1}, 
     {0,0,2}, 
     {0,0,3}, 
     {0,0,4}, 
     {0,0,5}, 
     {0,0,6}, 
     {0,0,7}, 
     {0,0,8}, 
     {0,0,9}, 
     {0,0,10} 
    }; 
    beginFreeIndex = 0; 
} 
//etc... 

謝謝..

+0

爲什麼你使用初始化聲明,所以避免需要init_heap()函數? –

回答

2
struct fraction myArray[] = { 
    {0,0,1}, 
    {0,0,2}, 
    {0,0,3}, 
    {0,0,4}, 
    {0,0,5}, 
    {0,0,6}, 
    {0,0,7}, 
    {0,0,8}, 
    {0,0,9}, 
    {0,0,10} 
}; 

你正在做一個本地陣列稱爲myArray這是隱藏全球myArray。然後,當你的功能結束時,本地myArray超出範圍,你失去了一切。同時,全球myArray仍爲空。

嘗試:

myArray = { 
    {0,0,1}, 
    {0,0,2}, 
    {0,0,3}, 
    {0,0,4}, 
    {0,0,5}, 
    {0,0,6}, 
    {0,0,7}, 
    {0,0,8}, 
    {0,0,9}, 
    {0,0,10} 
    }; 

編輯:

正如@大衛赫弗南指出,你聲明的指針數組來struct fraction在這一行:extern struct fraction *myArray[10];。我想你只是想要得到一組struct fraction,所以你應該試試這個來代替那一行:extern struct fraction myArray[10]

+0

全局數組myArray是一個指向struct的指針數組。我認爲這需要改變。 –

+0

@Tushar當我這樣做時,我在myArray上發生錯誤「exxpression必須是可修改的值」 – b15

+0

@ user1736218請參閱我編輯的答案。 – Tushar