C第十八次课(结构体与数组 结构体的大小 联合体 哑元 机器存放ip 字符串与整型转换)

C语言第十八次课

(1)续 结构体与数组
在这里插入图片描述
编写代码 要求打印学生数据:
在这里插入图片描述
编写为:用 . 访问时
在这里插入图片描述
用指向符-> 时:
在这里插入图片描述

(2)结构体的大小:研究结构体的对齐方式,以struct node开头;

在这里插入图片描述
注意:这里所表述的都是最大基本类型 ,只看是char double int一类的,而不是看数组个数或者组合类型来计算。

计算结构体变量大小时 默认从0开始,0可以整除任何数。
在这里插入图片描述
进行位置更改后,结构体变量大小也发生改变。
在这里插入图片描述
练习:
在这里插入图片描述
在这里插入图片描述
计算嵌套结构体变量的大小:
在这里插入图片描述
练习:
在这里插入图片描述
在这里插入图片描述
输出s1和s2的大小为多少?
在这里插入图片描述
如何计算偏移量的大小:利用 强转 成结构体指针
在这里插入图片描述

为什么要字节对齐

在这里插入图片描述
#pragma pack(n) 指定对齐值
在这里插入图片描述

(3)联合体 (共用体) 目的是:对同一个数据采取不同类型的识别;用union node表示;共享一段内存空间并且联合变量长度为各成员中最长的长度。
在这里插入图片描述
判断打印的值?

数据采用小端存放 高地址存放高字节 低地址存放低字节;从下往上=从高到底。
本体联合体中最长字节为2字节;则联合体变量的长度为2字节;x=2;sx=2;
按端存放后分别打印62和62,对应b和a的ASCII码值。
在这里插入图片描述
补充:类型对指针有两个约束:
1.约束其+1的能力;
2.解引用的能力;

判断以下程序是否能运行?
程序可以运行 但此时a和b不是上一题中的数组,a,b同时存放在一个字节当中,打印出的地址相同。b!=0,存放的是01,所以打印值为:d。
在这里插入图片描述
(4)哑元;(无名结构体)
struct后没有名字;

union Node
{
  struct //哑元
  char a;
  char b;
};  

注意:
对于内置类型不能定义为:int int ;(变量名不能是关键字)
但对于结构体可以定义为:struct Node Node;(自己设计的结构体 不是关键字)

typeof struct Node
{
   char ar[2];
   short sx;
 };Node;//加了typeof后此时Node从结构体变量转换为类型。

注意:

struct 
{
   char ch[2];
   short sx;
 };x

struct
{
  char ch[2];
  short sx;
};y
//此处 x和y不是同种类型;不能进行彼此赋值 例如:x=y;不成立

此处x占8字节:
在这里插入图片描述
(5)三个函数的用法:sprintf_s;printf;fprintf;
在这里插入图片描述
在这里插入图片描述
scanf 返回正确接收数据的个数

int len = printf("a=%d b=%d \n",a,b)//返回其长度len
unsigned intStr_TO_Unit(char*stra)
{
assert(stra != nullptr);
IPNode x;
int s[4];
char ch;
int n = scanf_s(stra,"%d.%d.%d.%d%c,&s[3],s[2],s[1],s[0],ch)//核心代码
if(n != 4)return -1;
 for (int i = 3;i>0;i++)
 {
  if(s[i]>=0&&s[i]<=255{
  x.sx[i]=s[i];
  }
   else
   {
  printf("error \n");
  return -1;
   }
   return x.addr;
 }
}

int main()
{
char stra[]=("128.11.3.31")
char strb[]=("377.12.34")
char strc[]=("125.11.34.23.23.43"unsigned int ip=Str_TO_Unit(stra);
printf("%u,\n,ip"return 0;

}
//运行后为2148205343


(6)机器存放ip地址与 字符串和无符号整型之间的转换
在这里插入图片描述
举例:
在这里插入图片描述
每8个二进制转换成10进制表示。

整型转换成字符串
itoa:此函数可把整形转换成字符串:
程序如下:
在这里插入图片描述
简化其编程 用联合体来编写(共享空间)
在这里插入图片描述

//字符串转换成整型: str[ ]=>unsigned int
首先考虑怎么把125.11这种读出来
atoi函数可以把字符串转换成整型,但atoi遇到“ .” 就不转换了
在这里插入图片描述
p=strchr(p, ’ , ');用来查询点 “.”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值