#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 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(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));
}
*******************************************************/
#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));
}
*******************************************************/