案例:给函数指针 取个别名
案例:给结构体取个别名
知识点8【结构体指针】
typedef struct stu
{
int num;
char name[32];
float score;
}STU,*STU_P;
//STU就是struct stu的类型
//STU_P就是struct stu *的类型
void test04()
{
STU lucy={100, "lucy", 99.9f};
//STU_P p=&lucy;
STU *p = &lucy;
printf("num = %d,name=%s,score=%f\n", lucy.num, lucy.name,lucy.score );
//*p = *&lucy=lucy
printf("num = %d,name=%s,score=%f\n", (*p).num, (*p).name,(*p).score );
//直接通过p访问lucy成员
printf("num = %d,name=%s,score=%f\n", p->num, p->name, p->score );
//如果.或->左边 是变量 就用. 如果是地址就用->
printf("num = %d,name=%s,score=%f\n", (&lucy)->num, (&lucy)->name, (&lucy)->score );
}
运行结果:
案例:堆区申请结构体空间
知识点9【结构体指针作为函数的参数】
知识点10【函数内部操作外部数组】
typedef struct stu
{
int num;
char name[32];
float score;
}STU,*STU_P;
STU* getSTUArray(int n)
{
return (STU *)calloc(n,sizeof(STU));
}
void myInputSTUArray(STU *arr, int n)
{
int i=0;
for(;i < n; i++)
{
printf("请输入第%d个学生的信息:",i+1);
//scanf("%d %s %f", &arr[i].num, arr[i].name, &arr[i].score );
scanf("%d %s %f", &(arr+i)->num, (arr+i)->name, &(arr+i)->score );
}
return;
}
void myPrintSTUArray(STU *arr, int n)
{
int i=0;
for(i = 0; i < n; i++)
{
printf("num=%d,name=%s,score=%f\n", (arr+i)->num, (arr+i)->name, (arr+i)->score );
}
return;
}
void test07()
{
STU *arr = NULL;
int n = 0;
printf("请输入学生的个数:");
scanf("%d", &n);
//根据学生的个数 从堆区申请结构体数组空间
arr = getSTUArray(n);
//获取键盘输入
myInputSTUArray(arr, n);
//遍历结构体数组
myPrintSTUArray(arr, n);
//释放空间
if(arr != NULL)
{
free(arr);
arr=NULL;
}
}
int main(int argc, char const *argv[])
{
test07();
return 0;
}
运行结果:
知识点11【结构体对齐问题】
步骤:
1、确定分配单位:每一行应该分配的字节数,由结构体中最大的基本类型的大小决定。
2、确定每个成员的起始位置的偏移量 = 成员的基本类型的整数(0~n)倍
3、收尾工作:结构体的总大小 == 分配单位的整数倍。
案例:
结构体嵌套结构体:
typedef struct
{
int x;
int y;
}DATA3;
typedef struct
{
int a;
int b;
DATA3 c;//结构体嵌套结构体
}DATA4;
void test03()
{
//结构体嵌套结构体:访问到最底层
DATA4 data;
data.a = 10;
data.b = 20;
data.c.x = 30;
data.c.y = 40;
printf("%d\n", data.c.y);
}
运行结果:
结构体嵌套结构体 的对齐问题
步骤:
1、确定分配单位:每一行应该分配的字节数,由所有结构体中最大的基本类型的大小决定。
2、确定每个成员的起始位置的偏移量 = 成员的基本类型的整数(0~n)倍
结构体成员的偏移量 = 被嵌套的结构体里面最大的基本类型的整数倍
结构体成员中成员偏移量 相对与 被嵌套的结构体
3、收尾工作:结构体的总大小 == 分配单位的整数倍。
结构体成员 的总大小 == 被嵌套的结构体里面最大的基本类型的整数倍
案例:
结构体对齐深思:
知识点11【强制类型对齐】
步骤:
1、确定分配单位:每一行应该分配的字节数,min(value, 默认分配单位)
2、确定每个成员的起始位置的偏移量 = 成员的基本类型的整数(0~n)倍
3、收尾工作:结构体的总大小 == 分配单位的整数倍。
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0