根据给定的文件信息,我们可以总结出以下与华为C语言笔试相关的知识点:
### 一、基础知识及误区澄清
#### 1. 数组初始化与默认值
- **题目示例**:“有数组定义`inta[2][2]={{1},{2,3}};`则`a[0][1]`的值为0。”
- **知识点解析**:在C语言中,当二维数组部分元素被初始化时,未指定的部分会自动初始化为0。例如,在给定的数组定义中,`a[0][0] = 1`,`a[1][0] = 2`,`a[1][1] = 3`,而`a[0][1]`未被指定,因此它的值为0。
#### 2. 函数指针的理解
- **题目示例**:“`int(*ptr)()`,则`ptr`是一维数组的名字。”
- **知识点解析**:`int(*ptr)()`实际上定义了一个指向函数的指针,该函数返回一个整型值。这里`ptr`并不是一维数组的名字,而是指向一个返回int类型的函数的指针。
#### 3. 指针比较运算符的应用
- **题目示例**:“指针在任何情况下都可进行`>`,`<`,`>=`,`<=`,`==`运算。”
- **知识点解析**:在C语言中,对于指针变量来说,并非所有情况下都可以使用这些比较运算符。只有当两个指针指向同一个数组或它们之间存在一定的偏移量时,才能进行比较运算。例如,不能比较两个指向不同数组的指针的大小。
#### 4. `switch` 语句的适用类型
- **题目示例**:“`switch(c)`语句中`c`可以是`int,long,char,float,unsigned int`类型。”
- **知识点解析**:在标准C语言中,`switch` 语句只接受整型数据作为条件表达式的结果,包括`int`、`char`、`short`、`long`、`unsigned int`等,但不包括`float`。因此,`float`类型不能用作`switch` 语句的条件表达式的类型。
#### 5. 宏定义的理解
- **题目示例**:“`#define print(x) printf("theno,"#x",is")`
- **知识点解析**:这里通过宏定义创建了一个名为`print`的宏,它接受一个参数`x`。宏展开后,`#x`将把`x`转换成其对应的字符串形式。需要注意的是,宏定义不进行类型检查,因此使用时需特别小心以避免错误。
### 二、进阶知识点
#### 1. `sizeof` 运算符的应用
- **题目示例**:“在Windows下,写出运行结果,每空2分,共10分。
```
char str[] = "Hello";
char *p = str;
int n = 10;
sizeof(str) = () sizeof(p) = () sizeof(n) = () void func(char str[100]) {}
sizeof(str) = ()
```
- **知识点解析**:
- `sizeof(str)`返回的是数组`str`的字节数,即`6`(包含终止符`\0`)。
- `sizeof(p)`返回的是指针`p`的大小,通常为`4`或`8`字节(取决于平台)。
- `sizeof(n)`返回的是整型变量`n`的大小,通常是`4`字节。
- `sizeof(str)`(在`func`函数定义中)返回的是传递给函数的数组参数的实际大小,但由于传递的是数组的首地址,实际返回的是指针的大小。
#### 2. 内存管理与指针操作
- **题目示例**:“运行test函数有什么结果?”
```
void setmemory(char** p, int num) {*p = (char*)malloc(num);}
void test(void) {char* str = NULL; getmemory(&str, 100); strcpy(str, "hello"); printf(str);}
```
- **知识点解析**:这段代码展示了如何使用`malloc`动态分配内存,并通过指针传递和修改内存。需要注意的是,`malloc`分配的内存需要手动释放,否则会导致内存泄漏。
#### 3. 指针和数组的结合使用
- **题目示例**:“设`int arr[] = {6,7,8,9,10};` `int* ptr = arr;` `*(ptr++) += 123;` `printf("%d,%d",*ptr,*(++ptr));`”
- **知识点解析**:这里演示了如何通过指针访问和修改数组中的元素。`*(ptr++)`表示先取值再递增指针,因此`*(ptr++) += 123;`将`arr[0]`增加123。之后,`*ptr`和`*(++ptr)`分别表示`arr[1]`和`arr[2]`的值。
### 三、编程实践题
#### 1. 字符串比较
- **题目示例**:“不使用库函数,编写函数`int strcmp(char* source, char* dest)`相等返回0,不等返回-1。”
- **知识点解析**:实现字符串比较功能时,需要逐个字符地比较两个字符串直到遇到终止符`\0`。如果所有对应位置的字符相同,则字符串相等;如果有任意一个位置的字符不同,则字符串不相等。注意处理字符串长度不同的情况。
#### 2. 回文字符串检测
- **题目示例**:“写一函数`int fun(char *p)`判断一字符串是否为回文,是返回1,不是返回0,出错返回-1。”
- **知识点解析**:实现回文字符串检测时,可以从字符串的两端向中间逼近,比较对应的字符是否相同。可以通过设置两个指针分别指向字符串的开始和结束位置来实现这一过程。注意处理空字符串的情况。
以上就是从给定的文件中提取出的相关知识点,涵盖了C语言的基础语法、指针操作、内存管理以及字符串处理等方面的知识。希望这些内容能够帮助到准备华为C语言笔试的读者。