2013-01-07 183 views
1

根据建议,我修改了代码, 但我该如何初始化结构中的单个元素?阵列初始化

#include<stdio.h> 

typedef struct student 
{ 
    int roll_id[10]; 
    int name_id[10]; 
} student; 

int main() 
{ 
    student p = { {0} }; // if i want to initialize single element ''FIX HERE, PLs'' 
    student *pptr=&p; 
    pptr->roll_id[9]={0}; // here is the error pointed 

    printf (" %d\n", pptr->roll_id[7]); 

    return 0; 
} 

回答

4

{0}仅对作为聚集体(阵列或struct)初始化。

int roll_id[10] = {0}; /* OK */ 
roll_id[0] = 5; /* OK */ 

int roll_id[10] = 5; /* error */ 
roll_id[0] = {0}; /* error */ 

你似乎需要的是初始化struct student类型的p。这是用嵌套的初始化器完成的。

student p = { {0} }; /* initialize the array inside the struct */ 
+0

如果有在结构中的两个元件(例如roll_id [10]和name_id [10]),如果我只想初始化一个元素,那么“student p = {{0}};”这不工作,对吗?如何初始化结构中的单个元素。 –

+0

@WhozCraig:是的,这是正确的,我想知道是否有任何改变? –

+0

@ C99中的Swetha.P你可以使用成员初始化:'student p = {.roll_id = {0}}'如果你的C编译器是99以前的标准,那么你只有部分时间运气不好。 – WhozCraig

0

我可以在代码

#include<stdio.h> 

    typedef struct student 
    { 
    int roll_id[10]; 

    } student; 

    int main() 
    { 

    student p; 
    student *pptr=&p; 
    pptr->roll_id[10]={0}; // in this line it should be pptr->roll_id[9]=0; 


    printf (" %d\n", pptr->roll_id[7]); 


    return 0; 
    } 

看到两个错误,阵列的长度是10,因此指数应为9和u可以使用{0}仅在一个数组的初始化。

+0

其实我想初始化结构中的数组,像int array_zero [ARRAY_SIZE] = {0}; –

+0

如果你想在结构中初始化它,那么你可以做到这一点... 初始化数组,你可以这样做.. int myArray [10] = {5,5,5,5,5 ,5,5,5,5}; 缺失值的元素将被初始化为0: int myArray [10] = {1,2}; //初始化为1,2,0,0,0 ... 因此,这将初始化所有元素为0: int myArray [10] = {0}; //所有元素0 –

0

使用如下面在单个数组元素初始化:

pptr->roll_id[x] = 8 ; // here x is the which element you want to initialize. 

使用如下面在整个数组初始化:

student p[] = {{10, 20, 30}};//just example for size 3. 
student *pptr = p; 
for (i = 0 ; i < 3; i++) 
    printf ("%d\n", pptr->roll_id[i]);