2013-03-30 37 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