2015年3月19日 星期四

宣告struct的兩種方式(struct與typedef struct)/struct給值的兩種方式

之前寫了許多struct的程式,因為趕project沒有對這些寫法特別去研究(多數是copy, paste Orz),現在比較有空了,就研究了一下並且做個紀錄。

首先是宣告struct的方法,分別有兩種方式首先講第一種(struct):
假設現在要宣告一個student的一個結構(struct),裡面包含學生的學號(id)以及年紀(age)可以這樣子寫=====>
struct Student{       //定義
     int id;
     int age;
};
而使用的寫法如下===>
struct Student stu[2];   //宣告
stu[0].id=903135;       //給值
stu[0].age=19;
stu[1].id=903137;
stu[1].age=20;


再講第二種寫法之前,稍微說明一下typedef這個東西,它的用法如下:
typedef int _Uint32;  //把_Uint32這個字串定義為等同於int
_Uint32 i=0;              //用_Uint32宣告整數變數
我相信大家對這種用法都滿熟悉的~


接下來如果使用第二種(typedef struct)的方式的話:
是這樣子寫的====>
typedef struct{     //定義
     int id;
     int age;
}Student;
上面的寫法可以看成Student被定義成是種struct型態(Student代表struct Student),並且成員有id與age。

因此使用的方式是這樣子寫的====>
Student stu[2];            //宣告
stu[0].id=903135;       //給值
stu[0].age=19;
stu[1].id=903137;
stu[1].age=20;

也可以寫成這樣:
Student stu[2] = {
{903135, 19},{903137, 20}
}

====================分隔線======================

另外一個Topic是struct給值的方法,上面的給值方式是我們比較常看到的,另外還有一種進階的寫法,是這樣子寫的====>
struct Student{       //定義
     int id;
     int age;
};

struct Student stu[2]=
{
          [0]={
                        .id=903135,
                        .age=19,
                 },
          [1]={
                        .id=903137,
                        .age=20,
                 },
}
**注意這種寫法式宣告同時就給值,給值的部分都是用逗號區隔喔(不是分號哦)!**

以下程式是實作的範例
//================= struct_example.c =================//
#include <stdio.h>

struct staff
{
int id;
int age;
};

typedef struct
{
int id;
int age;
}student;

int main()
{
int i;
// ==========================================
// struct first define usage

struct staff sta[2]=
{
[0]={
.id=100001,
.age=22,
   },
[1]={
.id=100002,
.age=23,
   },
};
// ==========================================

// ==========================================
// struct another define usage

student stu[2]={
      [0]={
.id=903135,
.age=19,
  },
      [1]={
.id=903137,
.age=20,
  },
};
// ============================================

for(i=0; i<2; i++)
        {
                printf("struct staff[%d].id=%d\n", i+1, sta[i].id);
                printf("struct staff[%d].age=%d\n", i+1, sta[i].age);
                printf("\n");
        }

printf("\n");

for(i=0; i<2; i++)
{
printf("struct student[%d].id=%d\n", i+1, stu[i].id);
printf("struct student[%d].age=%d\n", i+1, stu[i].age);
printf("\n");
}

return 0;
}
//====================== End =======================//


輸出結果如下:









沒有留言:

張貼留言