//結構體--嵌套結構體和結構體數組 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _parent{ int num; char name[30]; //結構體內部定義結構體,若是不定義嵌套結構體變量,那麼該嵌套結構體的屬性則會被看成父結構體的屬性 struct son{ int age; char sname[30]; }; }Parent; typedef struct _parent2{ int num; char name[30]; //結構體內部定義結構體,若是定義嵌套結構體變量,那麼該嵌套結構體的屬性沒法被父結構體調用 //可是父結構體能夠調用嵌套結構體變量 struct son2{ int age; char sname[30]; }s1; }Parent2; struct parent3{ int num; char name[30]; }parr2[2] = { { 5, "父親5" }, { 6, "父親6" } };//結構體數組定義初始化二 void main() { /* 嵌套結構體 */ Parent p1; p1.num = 1; sprintf(p1.name, "父親"); p1.age = 12; sprintf(p1.sname,"兒子"); printf("num=%d;name=%s;age=%d;sname=%s\n",p1.num,p1.name,p1.age,p1.sname); Parent2 p2; p2.num = 2; sprintf(p2.name, "父親2"); p2.s1.age = 13; sprintf(p2.s1.sname, "兒子2"); printf("num=%d;name=%s;age=%d;sname=%s\n", p2.num, p2.name, p2.s1.age, p2.s1.sname); /* 結構體數組的定義 */ Parent2 parr1[2] = { { 3, "父親3", 12, "兒子3" }, {4,"父親4",15,"兒子4"} };//結構體數組定義初始化一 //Parent2 pa1, pa2; //Parent2 ptd[2] = { pa1, pa2 }; /* 報錯: error C2440 : 「初始化」 : 沒法從「Parent2」轉換爲「int」 rror C2440 : 「初始化」 : 沒法從「Parent2」轉換爲「char」 */ //不存在這種結構體初始化方式,C語言編譯器將pa1看成第一個結構體元素的第一個參數, //pa2看成第一個結構體元素的第二個參數 //因此報錯 Parent2 ptdd[2]; //memset(ptdd, 0, sizeof(ptdd)); memset(&ptdd, 0, sizeof(ptdd)); //兩種初始化都正確,推薦使用第二種,由於第二種更加符合memset函數的用法,第二種的指針是指向數組的指針,第一種的指針是指向數組第一個元素的指針
//這裏使用memset()的目的是初始化整個數組,因此第二個比較符合。
system("pause"); }