C/C++知识点之C语言 内存对齐 判断日期 结构体部分知识
小标 2018-08-27 来源 : 阅读 1065 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言 内存对齐 判断日期 结构体部分知识,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言 内存对齐 判断日期 结构体部分知识,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

1.结构体 声明

2.typedef? ?提升leve
typedef其实是为这个结构体起了一个新的名字,test4;
typedef struct test3 test4;
test4 相当于struct test3;
3.
typedef 的几种特殊方式
typedef int(*pfun) (int,int) //函数指针
typedef int (*p)[10]? ?数组指针

把typedef 先去掉 看是什么类型
tyepedef int ARR[10]

ARR arr
4.
def? // const? 起别名? ?字符替换??

const int *p1 ;// const 修饰* 解引用 内容不可以变 地址可以边
int * const? p2 ;? //const 修饰 p2 . 内容可以变? ?地址不可以变

5.? ? “*” 和后面的先结合


6.const? * p
? int * const p


7.? ?.? 运算符? 和? - >

前面有指针,就用 ->

8.? * 解引用? ?声明指针

8.strcpy 的用法

9.? ? 自引用

11.部分代码?
? 1. 学生结构体变量 age name?
? 2. strcpy () 在数组中 字符是一个一个保存的 所以需要改变字符串就要用strcpy
12.内存对齐

?A.前面的地址必须是后面的地址的整数倍,不是就补齐
?B.整个struct的长度必须是最长字节的正数倍!~~
C.如程序中有#pragma pack(n)预编译指令,则所有成员对齐以n字节为准(即偏移量是n的整数倍),不再考虑当前类型以及最大结构体内类型
13.为什么要内存对齐
? ? 字节对齐主要是为了提高内存的访问效率,比如intel 32位cpu,每个总线周期都是从偶地址开始读取32位的内存数据,如果数据存放地址不是从偶数开始,则可能出现需要两个总线周期才能读取到想要的数据,因此需要在内存中存放数据时进行对齐。?

 

代码部分:

// 定义一个结构体变量(年月日)计算该日是本年中的第几天 注意闰年问题

#include
#include
//#define  PI 3
struct MyList1 
{
 int num ;
 int age ;
 char *name;
 char sex[8];
};

typedef struct MyList2

{
 int num ;
 int age ;
 char name[15];
 char *sex;
}MyList2;

typedef struct MyList3
{
 char *name;
 int num;
}list;


void Show1(list *q4 ,int len )  //for循环

{
 int i ;
 for(i=0;i2))
 {

  printf("This year is  Leap Year \n");
  printf ("And today is the %d year's %d day \n",date.year,count+1);
 }
 else
 {
  printf("This year is not Leap Year \n ");
  printf("And toda is the  %d year's %d day \n",date.year,count);
 }

}

////switch   error
//void Calculate3(int year,int month ,int day ) //switch语句
//{
// switch (date.month)
// {case 1: day=date.day;    break;
// case 2:  day=date.day+3; break;
// case 3: day=date.day+59; break;
// case 4: day=date.day+90; break;
// case 5: day=date.day+120; break;
// case 6:day =date.day+151; break;
// case 7: day=date.day+181; break;
// case 8: day=date.day+212; break;
// case 9: day=date.day+243; break;
// case 10: day=date.day+273; break;
// case 11: day=date.day+304; break;
// case 12: day=date.day+334; break;
//  break;
// }
// if ((date.year %4== 0 && date.year % 100 != 0 ||date.year % 400 == 0) && date.month >=3)  
// {
//  day+=1;
//  printf("This year is  Leap Year \n");
//  printf ("And today is the %d year's %d day \n",date.year,date.day);
// }
// else
// {
//  printf("This year is not Leap Year \n ");
//  printf("And toda is the  %d year's %d day \n",date.year,date.day);
// }
//}


//使用 . 运算符 和 -> 运算符
typedef struct A
{
 char a;
 int b;

 struct A *pe;
}A;

typedef struct B
{
 A a;
 int b;
 struct A * pc;
}B;

struct C   //内存对齐
{
   int c;
   char a;//前面的地址必须是后面的地址的整数倍
   short b;
   
};
int main()
{
 //1.鲁班七号一般struct输出
 struct MyList1 q1= {1,6,"LUBAN","nan"};
 q1.name = "LUBAN7HAO";
 printf("%d,%d,%s,%s\n",q1.num,q1.age,q1.name,q1.sex);

 //2.鲁班七号typedef 输出  strcpy 曹孟德
 MyList2 q2={2,9,"LUBAN7","NAN"};
 q2.num = 4;
 strcpy(q2.name,"caomengde");
 printf("%d %d %s %s\n",q2.num,q2.age,q2.name,q2.sex);
 list q4[4]= {{"luban1",100},{"luban2",99},{"luban3",94},{"luban6",92}};

 //3.show 函数输出   王者荣耀  for 循环打印
 int len = sizeof(q4)/sizeof(q4[0]);
 Show1(q4,len);

 // 4 define 替换
 //printf ("%d\n",PI);  

 //5 计算日期 不加结构体变量
 Calculate1(2008,3,15);

 //6 计算日期   加结构体变量
 Calculate1(2019,4,15);
 ////error 7 计算日期 switch语句
 //Calculate3(2016,4,5);

 //8  使用 . 运算符 和 -> 指向符
 B b;
 b.a.a; //通过B 访问 A中的a
 b.pc;//pc前面没有指针 用 . 
 b.a.pe;//pe 前面没有指针 用 . 
 b.pc->pe; // pe 前面有指针 pc 所以用 -> 

 printf ("the len is  is %d ",sizeof(C));

 getchar();
 return 0;
}    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程