C語言 結構體(嵌套結構體--結構體數組)


//結構體--嵌套結構體和結構體數組
#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"); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM