1.关于memcpy使用的时候,memcpy(&b,&a,n):其中a如果是结构体传入,具体是如何传入,需要取地址符吗?
答:结构体传入的为整个结构体变量需要取地址符&,而且还要将传入的值强制转换为(u8*)类型。另外b最好是u8的指针变量。 另外关于传入的是结构体内部成员时,不管这个结构体是否为指针还是普通变量,只要这个成员是普通变量时,都要取地址符&。只有当这个结构体的成员是指针类型时,才可以不用取地址符&。
2.定义指针型的结构体变量的意义是什么?
具体原因:在定义函数时,形参定义为结构体指针时,方便调用函数时传入变量,指针变量更方便。参数传会快很多,否则会把结构体整个变量都取出来。
注:对于调用成员变量时,使用ptr->a或者 (*ptr).a
3.字符串与指针的关系?
答:在C程序中,可以用两种方法访问一个字符串:a.用字符数组存放一个字符串,然后输出该字符串;b.用字符指针指向一个字符串。
4.字符串指针
(1)关于结束符’\0’:实际表示的是0x00;
(2)com_para[0] = 0x00;其中com_para是u8*指针,因此可以使用这个形式给所指向的地址第一个字节赋值;而*com_para = 0x00是给整个指针赋值??(u不知道对不对)
(3)关于指针赋值时,尽量传地址,而避免使用*ptr进行值传递。
5.右移>>和左移<<
右移(>>)
1.按位右移:>>
2.格式 :x >>位数(非负整数)
3.规则 :使操作数的各位右移,移出的低位舍弃;
4.高位 :对无符号数和有符号中的正数补 0;符号数中的负数取决于
所使用的系统 补 0 的称为“逻辑右移”,补 1 的称为“算术右移”。
5.说明 :x、y 和“位数”等操作数,都只能是整型(允许字符型数据)。
6.例如 : 5 << 2 = 20 s:0101 → 10100,
20 >> 2 = 5 :10100 → 00101
左移(<<)
1.按位左移:<<
2.格式 :x<<位数(非负整数)
3.规则 :使操作数的各位左移,低位补 0,高位溢出。
4.例如 : 5 << 2 = 20:0101 → 10100