C语言面试试题集锦:指针、循环、内存操作等
需积分: 9 119 浏览量
更新于2024-09-09
收藏 37KB DOC 举报
"C语言面试题集合,涵盖了指针、常量、内存操作、循环、数据类型比较、字节序判断、无参数交换、宏定义、数组操作等核心概念,适用于软件技术行业的面试准备。"
1. 在C语言中,变量a可以有不同的定义:
a) `int a;` - 定义一个整型变量。
b) `int *a;` - 定义一个指向整型数的指针。
c) `int **a;` - 定义一个指向指针的指针,该指针指向的指针是指向一个整型数。
d) `int a[10];` - 定义一个包含10个整型数的数组。
e) `int (*a)[10];` - 定义一个数组,包含10个指向整型数的指针。
f) `int (*a)[10];` 或 `int *a[10];` - 定义一个指针,它指向一个包含10个整型数的数组。
g) `int (*a)(int);` - 定义一个指向函数的指针,该函数接受一个整型参数并返回一个整型数。
h) `int (*a[10])(int);` - 定义一个包含10个指针的数组,这些指针指向函数,函数接受一个整型参数并返回一个整型数。
2. 创建一个MIN宏,可以这样实现:
```c
#define MIN(a, b) ((a) < (b) ? (a) : (b))
```
3. 使用C语言编写死循环,可以简单地写成:
```c
for(;;) {
// 无限循环体
}
```
4. 关键字`const`表示常量,它可以修饰变量、指针和函数参数等,不同情况含义不同:
- `const int a;` - a是一个不能修改的整型变量。
- `int const a;` - 等同于上一条。
- `const int *a;` - a是一个指向整型常量的指针,不能通过a修改所指的值。
- `int *const a;` - a是一个指向整型数的常量指针,指针本身不可变,但可以修改所指的值。
- `int const *a const;` - a是一个指向整型常量的常量指针,既不能修改指针,也不能修改所指的值。
5. 访问绝对地址0x67a9并设置为0xaa66,这通常涉及内存映射和汇编指令,但纯C语言下无法直接完成,因为ANSI C不支持直接的内存地址操作。在实际的嵌入式环境中,可能需要使用特定平台的API或内联汇编。
6. 函数`getmemory`分配了内存,但没有返回分配的地址,导致`test`函数中的`str`未初始化。正确的做法是让`getmemory`返回分配的指针:
```c
void getmemory(char** p) {
*p = (char*)malloc(100);
}
void test() {
char* str = NULL;
getmemory(&str);
strcpy(str, "helloworld");
printf(str);
}
```
7. 比较bool、int、float和指针变量与"零值"的if语句:
- `if (!bool_var)` - bool变量为假(0)时为真。
- `if (int_var == 0)` - int变量为0时为真。
- `if (float_var == 0.0)` - float变量等于0.0时为真,注意浮点比较需谨慎。
- `if (!pointer_var)` - 指针变量为NULL或未初始化时为真。
8. 判断处理器字节序,可以编写如下函数:
```c
int is_little_endian() {
union {
int i;
char c[4];
} test;
test.i = 1;
return test.c[0] == 1 ? 1 : 0;
}
```
如果返回1,则为little-endian,0则为big-endian。
9. 不用第三方参数交换两个整数a和b的值,可以使用位操作:
```c
void swap(int* a, int* b) {
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
```
10. `do...while`和`while...do`的区别在于,`do...while`先执行循环体再检查条件,至少执行一次;而`while...do`先检查条件,条件不满足则不执行循环体。
11. 在这段代码中,`*(a+1)`是第二个元素,输出为2,`*(ptr-1)`是数组最后一个元素,即5。输出为`2, 5`。`ptr`实际上指向了`a+1`的地址,因此`ptr-1`相当于`a`的地址。
12. 代码中的`#define MAX 255`会导致`for`循环超过数组边界,因为`i`可以取到255,而数组`A`的索引只到0-254,所以会导致数组越界。
13. 这段代码的问题在于,`strcpy`尝试将字符串复制到未初始化的指针`str`所指向的内存中,可能导致内存错误或程序崩溃。正确做法是确保`str`指向有效的内存区域,如调用`malloc`分配内存。
508 浏览量
2024-03-29 上传
2012-11-17 上传
2013-08-21 上传
2024-11-08 上传
2024-11-08 上传
2024-11-08 上传
史上最菜程序猿
- 粉丝: 1
- 资源: 1
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍