第一周的学习,就感觉到了广嵌的老师都很厉害,来这里学习的人也很努力.相信在这样一个坏境中我能够有所收获.哈,发觉离我linux驱动的目标又近一步了.
这一周,主要是让老师摸摸我们的底子,让我们做了一份试卷一份是linux的,另一份是c语言的.
c语言试卷的一些问题的认识:
(1),++表达式
(A)a+=(a++);(B)a +=(++a);(C)(a++)+=a;(D)(++a)+=(a++)
答案是9,10,错误,11.第4小题,展开得(++a)=(++a)+(a++),右边结果所得值赋给左边,所以左边的++a,a不用自增,结果a的值还是11,不是12.
(2),地址操作问题
对绝对地址0x100000赋值
(unsignedint*)0x100000=1234,0x100000就会被赋予1234的值
让程序跳转到绝对地址0x100000去执行
首先将ox100000强制转换为函数指针void(*)()0x100000
执行函数指针*(void(*)()0x100000)
(3),转换技巧:在不用第三方参数的值的情况下,交换两个参数的值
i^=j
j^=i
i^=j
Linux试卷的一些认识:
(1),在linux中,IDE的通道的硬盘被表示为hd scsi被标识为sd,所以,第二个IDE通道的硬盘被表示为hdb
(2),下列程序在32位linux或unix中的结果是什么?
func(char *str)
{
printf("%d",sizeof(str));
printf("%d",strlen(str));
}
main()
{
char a[]="123456789";
printf("%d",sizeof(a));
func(a);
}
结果为1049
sizeof()是求对象或类型所占的字节数,而strlen()所算的数组的大小.而在32位即4嗰字节系统中,所以sizeof(str)为4