我正在寻找一种方法来初始化c头文件中的数组

时间:2015-12-16 16:01:15

标签: c

这些是我的max_subarray_data.h

的内容
#include<stdlib.h>

    int price[]={100,113,110,85,105,102,86,63,81,101,94,106,101,79,94,90,97};
    int n=(int)(sizeof(price)/sizeof(int))-1;
    int change[]={};
    for(int k=1;k<=n;k++)  **//here it is giving error-expected identifier or '('** 
         change[i]=price[i]-price[i-1];

我正在寻找解决此问题的方法!

2 个答案:

答案 0 :(得分:2)

您不能将代码放在函数之外,也不应将函数定义放在头文件中。

max_subarray_data.h应包含以下内容:

extern int price[];
extern int change[];

void init_change();

然后创建包含以下内容的max_subarray_data.c

int price[]={100,113,110,85,105,102,86,63,81,101,94,106,101,79,94,90,97};
int change[(sizeof(price)/sizeof(int))-1];

void init_change() 
{
    int n=(int)(sizeof(price)/sizeof(int))-1;
    for(int i=1;i<=n;i++) {
         change[i-1]=price[i]-price[i-1];
    }
}

然后在main中,您需要致电init_change()初始化change

编辑:

另请注意,循环现在分配给change[i-1]而不是change[i],否则您将在数组末尾写入一个元素,并且第一个元素将是未初始化的。

答案 1 :(得分:1)

最佳做法是遵循@dbush发布的内容。但如果你坚持,你可以像这样进行宏初始化:

#include <stdio.h>


#define PRICE_0         100
#define PRICE_1         113
#define PRICE_2         110
#define PRICE_3         85
#define PRICE_4         105
#define PRICE_5         102
#define PRICE_6         86
#define PRICE_7         63
#define PRICE_8         81
#define PRICE_9         101
#define PRICE_10        94
#define PRICE_11        106
#define PRICE_12        101
#define PRICE_13        79
#define PRICE_14        94
#define PRICE_15        90
#define PRICE_16        97

int price[]={
    PRICE_0,  // 0
    PRICE_1,  // 1
    PRICE_2,  // 2
    PRICE_3,   // 3
    PRICE_4,  // 4
    PRICE_5,  // 5
    PRICE_6,   // 6
    PRICE_7,   // 7
    PRICE_8,   // 8
    PRICE_9,  // 9
    PRICE_10,   // 10
    PRICE_11,  // 11
    PRICE_12,  // 12
    PRICE_13,   // 13
    PRICE_14,   // 14
    PRICE_15,   // 15
    PRICE_16};  // 16


#define PRICE_DIF(a,b)  (PRICE_ ## a - PRICE_ ## b)
int change[]={
    0,              // <-- what about this? :(
    PRICE_DIF(1,0),
    PRICE_DIF(2,1),
    PRICE_DIF(3,2),
    PRICE_DIF(4,3),
    PRICE_DIF(5,4),
    PRICE_DIF(6,5),
    PRICE_DIF(7,6),
    PRICE_DIF(8,7),
    PRICE_DIF(9,8),
    PRICE_DIF(10,9),
    PRICE_DIF(11,10),
    PRICE_DIF(12,11),
    PRICE_DIF(13,12),
    PRICE_DIF(14,13),
    PRICE_DIF(15,14),
    PRICE_DIF(16,15),

};



int main(void){
    for(int k=0;k<=17;k++)
         printf("%d\n",change[k]);

    return 0;
}