2013-01-07 231 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]);