C语言结构体的程序

C语言结构体的程序,第1张

第一段代码敬亮我觉得应该选d;

第一个printf不用说打印的就是a的元素;说说b,b=a把a赋给b;gender和score不用说;name是个指针,所以复制给b的也是个指针,a的name和b的name指向同一块类存地址,然后调用f();函数把b的name指针传递进去,在f()函数中开辟一块空间并把这块空间的地址赋给b的name指针,f()函数结束后,在f()中开辟的空间并未消失信稿尺了,f()函数中b。name指针是局部的,f();结束后b的name指针在栈中被释放滑高了,所以b。name和a的name指正还是一样的,

第二段代码就选a;

在struct stu中name是个字符数组,在创建stu的一个对象后,就有空间储存字符,b=a;你懂的

然后调用f()函数,把qian写入b的name的那块空间,空间中的字符串就变为了qian,

正好有个现成的:#include"stdio.h"

#define yes 1

#define no 0typedef struct date

{

int year

int month

int day

}DATE

long timedef(DATE d1,DATE d2)

int leap(int year)

int main()

{

DATE date1,date2

date1.year=2008

date1.month=11

date1.day=1

date2.year=2009

date2.month=12

date2.day=1 printf("%ld\n",timedef(date1,date2))}

int leap(int year)

{

if(year%400==0 ||(year%4==0&&year%100!=0))

return yes

else

return no

}

long timedef(DATE d1,DATE d2)

{

int i

long day=0,dayt1=0,dayt2=0

int d[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}

for(i=d1.yeari<d2.yeari++)

if(leap(i)==no) day+=365

else day+=366 for(i=1i<d1.month++i) dayt1+=d[leap(d1.year)][i]

dayt1+=d1.day for(i=1i<d2.month++i) dayt2+=d[leap(d2.year)][i]

dayt2+=d2.day return day+dayt2-dayt1

}

union是用来定义联合体的关键字,union维护足够的空间来置放多个资料成员中的最大的“一种”,而不是为每一个资料成员配置空间,在union中所有的资料成员共用一个空间,同时间只能储存其中一个成员的资料。

可以得出该共用体在内存中占用4个字节

k.a[0]=10000k.a[1]=15000为k的int a[2]成员赋值,即该内存的内容是[00111010] [10011000] [00100111] [00010000]将这4个字节换算成符点数就是0.001161.

scanf ("%s",k.d)//k.d[]="abcd"

因为scanf把4个输入压栈后再出栈对4个字符变量赋制值,则内存结构为纤做:

[01100100] [01100011] [01100010] [01100001]

d[3] d[2] d[1] d[0]

c(4个字节)

b(前两个字节)

a[1](前两个字节)a[0](后两个字节)

将这4个字节换算成符点数c就是:16777999408082104400000.000000.

至于上面的数字是怎么得来的,那要考虑浮点数在计算机中的储存结构问题了.在存储1个浮毁猜衡点数的32位内存中,

第一位是符号位,下来的8位是指数位,后面的23位是尾数位.

[01100100] [01100011] [01100010] [01100001]

换算成浮点数的算法是:

第一位为0:正数

下来的8位是:[11001000],减去[01111111]为[1001001].所以指数为73

再下来的23位是1100011[01100010] [01100001].所以尾数为

(1.11000110110001001100001)B = 2^0+2^(-1)+2^(-1)+2^(-6)+2^(-7)+2^(-9)+2^(-10)+2^(-14)+2^(-17)+2^(-18)+2^(-23).

最后兆此结果=底数^指数

可能你还会问为什么位数一样,结果还是有差距,那是因为浮点数的计算精度问题.浮点数的精度是有限的.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12405104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存