【知识点详解】
1. 局部变量与全局变量:
- 局部变量可以在函数内部定义,如果与全局变量同名,它会在函数内部屏蔽全局变量。若要访问全局变量,需使用作用域解析运算符"::"。
- 在同一个函数内部,可以多次定义同名的局部变量,其作用域仅限于该特定的代码块。
2. 引用全局变量:
- 使用`extern`关键字可以在其他源文件中引用全局变量,或者通过包含头文件来声明全局变量。如果头文件中全局变量声明错误,编译时可能不会报错,但链接时会出错。
3. 全局变量在头文件中的声明:
- 全局变量可以在头文件中定义,但为了避免重复定义,通常会在不同C文件中使用`static`修饰来声明同名全局变量,限制其作用域为单个源文件。
4. `for( ; 1 ; )`循环:
- 这是一个无限循环,与`while(1)`等效。
5. `do...while`与`while...do`的区别:
- `do...while`先执行循环体,然后检查条件,因此至少执行一次。
- `while...do`先检查条件,条件满足才执行循环体,因此可能不执行。
6. C语言代码输出分析:
```
main(){
int a,b,c,d;
a=10;
b=a++; // b=10
c=++a; // a=11, c=11
d=10*a++; // a=12, d=120
printf("b,c,d:%d,%d,%d", b, c, d);
return 0;
}
```
输出:b,c,d:10,11,120
7. 判断题:
- 1. 错误。a[0][1]的值为2,因为数组定义时第二个元素是2。
- 2. 错误。ptr是一个指向函数的指针。
- 3. 错误。指针在某些情况下不能进行比较运算,例如未初始化的指针。
- 4. 错误。switch语句中的c不能是float类型。
- 5. 正确。`print(x)`宏展开为`printf("the no, %d,is ", x)`。
8. 填空题:
- sizeof(str)在main函数中是数组的总大小,即6('H' 'e' 'l' 'l' 'o' '\0')。在func函数中,str是参数,sizeof(str)是指针的大小,通常是4或8,取决于系统架构。
- `test()`函数运行结果是打印"hello",因为`getmemory`分配内存后,`strcpy`复制字符串到内存,然后打印。
- `printf("%d,%d", *ptr, *(++ptr));`在给定的数组中,执行后`ptr`指向12,然后自增,所以`*ptr`是12,`*(++ptr)`是13。输出:12,13。
9. 编程题:
- 不使用库函数实现`strcmp`,主要比较字符序列直到遇到'\0',如果两者相等返回0,否则返回非0值(通常是第一个不匹配字符的ASCII码差值)。
- 判断字符串是否为回文,可以使用双指针法,分别从字符串首尾向中间遍历,比较字符是否相同,若有不匹配则返回0,遍历完未找到不匹配则返回1。
这些是针对华为校园招聘笔试题中的部分知识点的详细解释,涵盖了变量作用域、循环结构、指针操作、字符串处理以及基本的C语言编程概念。对于准备参加IT公司面试或笔试的求职者来说,理解和掌握这些知识点至关重要。