C语言面试试题集锦:指针、循环、内存操作等
需积分: 9 89 浏览量
更新于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 上传
2014-03-15 上传
2018-10-29 上传
2024-12-26 上传
2024-12-26 上传
史上最菜程序猿
- 粉丝: 1
- 资源: 1
最新资源
- [影音娱乐]无组件音乐防盗链程序(PHP)_ft_php.rar
- 9Gag Simple Extension-crx插件
- profile-generator
- Dédalo:查找连接到ares p2p网络的所有房间。-开源
- 安卓壁纸v5.15.6 清爽版.txt打包整理.zip
- ruishaweigonglvwuxian,易语言c编译器模块源码,c语言
- terraform-aws网站
- MTZODROW-Style-Guide:Meghan Zodrow的更新样式指南
- asyncnio:Java 的 JDK7+ 异步套接字通道的洁净室实现(建立在 JDK1.4+ NIO SocketChannel apis 之上)
- E-commerce-website-with-realtime-tracking:这是一个具有实时跟踪的电子商务网站的项目构建。 使用此网站,您可以在购物车中添加他/她的物品,然后下订单。 该项目使用soket.io提供订单的实时跟踪
- 仿拍鞋网商城首页触屏版html5手机wap购物网站模板_网站开发模板含源代码(css+html+js+图样).zip
- Klumpinatoren-crx插件
- apitest,c语言链表源码代码,c语言
- Rating-System:一个可以对下属进行评分的简单系统
- MartinsAccount:我的个人资料库
- JS-Discord-Bot:我想学习JS