1. 程式人生 > >結構體初始化及結構體指標.結構體陣列.結構體函式的呼叫賦值等

結構體初始化及結構體指標.結構體陣列.結構體函式的呼叫賦值等

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int fun(void);
/*************************************
int ARRSCORE[3]={133,123,124};
   //學生  姓名 性別  年齡 考試成績
struct STWDENT
{
    char name[10];
char sex;
int age;
int *score;
};
struct node
{
  int  (*p)();
};
int fun(void)
{
printf("結構體函式呼叫測試o(∩_∩)oOK\n");
return 0;
}
struct mode
{
int num;
char null;
};

int main(void)

{
  int i;
 //結構體指標與結構體陣列


       struct STWDENT stu={"張三",'0',20,ARRSCORE};////結構體初始化及賦值     ①
struct mode* p=malloc(sizeof(struct mode));//申請指標空間 存放在棧區   ②
struct mode arr[3]={{23,'a'},{32,'b'},{44,'c'}};//結構體陣列 堆區空間 ,也可向下面一樣 申請記憶體 ③
  //struct mode* parr=malloc(sizeof(struct mode)*3);//佔用的也還是堆區空間
    struct node meed={fun};//結構體函式賦值的使用④

//結構體初始化及賦值①
printf("結構體初始化及賦值原始資料:%s,%c,%d,%d,%d,%d\n",stu.name,stu.sex,stu.age,stu.score[0],stu.score[1],stu.score[2]);

strcpy(stu.name,"李四");//使用strcpy函式實現結構體賦值
stu.sex='1';
stu.age=30;
stu.score=malloc(sizeof(int)*3);//申請記憶體空間
//malloc賦值
stu.score[0]=100;
stu.score[1]=200;
stu.score[2]=300;

printf("結構體初始化及賦值測試資料:%s,%c,%d,%d,%d,%d\n",stu.name,stu.sex,stu.age,stu.score[0],stu.score[1],stu.score[2]);
free(stu.score);//用完之後釋放陣列指標空間
stu.score=NULL;//記得讓陣列指標賦空語句

//結構體指標②
p->num=12;
p->null='a';
printf("結構體指標呼叫賦值測試資料:%d,%c\n",p->num,p->null);

//結構體陣列③
for(i=0;i<3;i++)
{
printf("結構體陣列呼叫賦值測試資料:%d,%c\n",arr[i].num,arr[i].null);
}

//結構體函式賦值的使用④
    meed.p();
}
******************************************/
/*******************************************
//結構體巢狀
struct nood
{
int n;
};
struct need
{
int b;
struct nood bp;
//struct need nod;//錯誤 未分配完全空間
struct nood* p;
};
main()
{
//struct need no={2,{2}};
//printf("%d\n",no.bp.n);


   struct need noo;
   noo.p=malloc(sizeof(struct need));
   noo.p->n=10;
   printf("%d\n",noo.p->n);




}
**********************************/

/******************************************************************
//結構體變數的大小不僅由 成員大小決定+記憶體對齊(資料儲存的規則)
//作用:大大增大記憶體讀取效率

//設定記憶體對齊

#pragma pack(8);//8位元組對齊 vc6.0系統預設是8位元組對齊
//#pragma pack(4);//4位元組對齊 vc6.0系統預設是8位元組對齊
//#pragma pack(1);//1位元組對齊 即結構體成員的位元組大小
struct NODE
{
    char ch;  //1
    short sh; //2
    int in;   //4
    float f;  //4
    double db;//8
    char* p;  //4
    char arr[5];//5  11+17=28
};
int main(void)
{
printf("%d\n",sizeof(struct NODE));
}


*******************************************************/