一、关于运算符"="和"=="
1.运算符“=”是赋值的意思;
例如:int a=0;意思为将int型变量赋值为0。
2.运算符“==”却是判断真假的意思,结果只有1或0;
例如:int a=0,b=-5,c;
c= a==b;
c的值是多少?
答案是:0。原因就是因为运算法“==”判定a≠b,判定结果为0;所以之后将0赋值给了c。
二、字符串的结束符是'\0';'\0'对应ASCII表的值就是0(NULL);
三、char str[100];int ret = strlen(strcpy(str,"Hello_World"));求ret的值;
1.答案:ret的值为11.
2.解释: strlen(strcpy(str,"Hello_World"))可以等效为strlen(str);这样就懂了吧,先是将字符串"Hello_World"复制到str字符串数组中,然后再计算字符串数组str的长度。
四、char str[10],*p=str;以下选项哪个是正确的:答案:B
A、str="ABC";------语法错误;此时str表示的是str[]的地址,此处不能这么用,正确的是:strcpy(str,"ABC");语句就是将字符串ABC复制到str字符数组中。
B、p="ABC";-----正确选项。p是一个指针,所以p中所放置数据应该是一个地址;p="ABC"语句的意思就是将字符串“ABC”的地址给了指针p,语法上没有问题。
C、*str="ABC";----语法错误。*str代表的是一个char型的数据,但“ABC”却是一个数组,错误。
D、*P="ABC";-----语法错误。与选项C的错误一致。
五、今天遇到了一个硬件错误HardFault_Handler
1.STM32/GD32的的硬件错误有:
(1)数组越界操作;
(2)内存溢出,访问越界;
(3)堆栈溢出,程序跑飞;
(4)中断处理错误;
2.我这次的错误属于堆栈溢出,程序跑飞问题。具体如下
定义了u8 flag=0; 但声明却是extern u32 flag;
上面的2行代码就是我这次的错误;我将之前的u32 flag=0;改为u8 flag=0后,并没有修改变量声明的定义范围,所以这里造成了--堆栈溢出,程序跑飞。
------希望对大家有所帮助。