C语言能力测试
一、简答
1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题);写一个"标准"宏MIN函数 ,这个宏输入两个参数并返回较小的一个
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
#define Min(a,b) ( ((a)>=(b))?(b):(a))
2.用变量a给出下面的定义
a) 一个整型数(An integer)
int a;
b)一个指向整型数的指针( A pointer to an integer)
int *a;
c)一个指向指针的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an integer )
int *(*a);
d)一个有10个整型数的数组( An array of 10 integers)
int a[10];
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)
int (*a)[10];
f) 一个指向有10个整型数组的指针( A pointer to an array of 10 integers)
int *a[10];
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
int *a(int);
h)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
int *a[10](int);
3. 关键字volatile有什么含意?并给出三个不同的例子。
Volatile修饰符告诉编译程序不要对该变量所参与的操作进行优化
1)并行设备的硬件寄存器。存储器映射的硬件寄存器通常加volatile
例如状态寄存器。以为设备寄存器会在你的程序不知道或者不介入的时候发生改变,那是因为设备寄存器可以被外设硬件修改。相反,变量中的不会变。设备寄存器的内容是易失的,或者在不注意的时候被修改。当声明指向设备寄存器的指针时一定要用volatile它会告诉编译 器不要对存储在这个地址的数据进行假设,编译器在优化这个变量时应该把它看作编译时未知的。
#define IOPMOD (*((Volatile unsigned *)(SYSCFG + 0x5000)))
2)一个中断服务程序中修改的供其他程序检测的变量。
3)多线程应用中被几个任务共享的变量。
4. 结构与共用体的区别?。
1、结构体每一位成员都用来表示一种具体事务的属性,共用体成员可以表示多种属性(同一存储空间可以存储不同类型的数据)。
2、结构体总空间大小,等于各成员总长度,共用体空间等于最大成员占据的空间。
3、共用体不能赋初值而结构体可以。
5. 求下面函数的返回值(微软)
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
8
6. 数组与指针的区别?
数组是一块数据;指针是一个指向变量
7. 移位操作为何最好使用无符号数?
使用有符号数会发生错误
8. 关键字 static的作用是什么?
static修饰函数:改变函数的作用域
static修饰变量:改变变量生命周期
9.#include<file.h> 与 #include "file.h"的区别?
头文件搜索路径不同
<>在系统头文件目录查找
“”先在当前目录查找,再到系统文件目录查找
10. 下面const的含义如何?
const int *a;
不可修改变量a
int const *a;
变量a的内容不可修改
int * const a;
变量a不可修改
int const * const a;
变量a和指向变量a的指针都不可修改
11. 什么是内存操作越界?
所谓内存越界,就是指当内存输入超出了预分配的空间大小,就会覆盖该空间之后的一段存储区域,导致系统异常
12. 什么是内存泄漏? 造成内存泄漏的原因有哪些?
内存泄露是指:内存泄漏也称作"存储渗漏",用动态存储分配函数动态开辟的空间
C语言学习一个阶段的练习
最新推荐文章于 2023-07-26 17:40:07 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)