结构体初始化及结构体指针.结构体数组.结构体函数的调用赋值等

本文探讨了C语言中结构体的初始化、结构体指针的使用、结构体数组的操作以及结构体函数的调用和赋值方法。通过实例代码详细解析了内存对齐在结构体中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


*******************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值