1
、用预处理指令
#define
申明一个常数,用以表明
1
年中有多少秒(忽略闰年问题);写一个“标准
#define
”宏
MIN
函数,这个宏输入两个参数并返回最小的一个。
答: 剖析: 这个面试题主要考查面试者对宏定义的使用,宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏 定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。程序员对宏定义的使用要非常小心,特别要注意两个问题: (1) 谨慎地将宏定义中的“参数”和整个宏用用括弧括起来。所以,严格地讲,下述解答: #define MIN(A,B) (A) <= (B) ? (A) : (B) #define MIN(A,B) (A <= B ? A : B )都应判0分; (2) 防止宏的副作用。 宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:((*p++) <= (b) ? (*p++) : (*p++)) 这个表达式会产生副作用,指针p会作三次++自增操作。除此之外,另一个应该判0分的解答是: #define MIN(A,B) ((A) <= (B) ? (A) : (B)); 这个解答在宏定义的后面加“;”,显示编写者对宏的概念模糊不清,只能被无情地判0分并被面试官淘汰。 2 、用变量 a 给出下面的定义 (a)一个整型数。 答: int a; (b)一个指向整型数的指针。 答:int *a; (c)一个指向指针的指针,它指向的指针是指向一个整型数。 答:int **a; (d)一个有10个整型数的数组。 答:int a[10]; (e)一个有10个指针的数组,该指针是指向一个整型数的。 答:int *a[10]; (f)一个指向有10个整型数组的指针。 答:int (*a) [10]; (g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数。 答:int *a(int); (h)一个有10个指针的数组,该指针是指向一个函数,该函数一个整型参数并返回一个整型数。 答:int (*a[10])(int);
答:一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确的说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。 例:(1)并行设备的硬件寄存器(如:状态寄存器) (2)一个中断服务子程序中会访问到的非自动变量 (3)多线程应用中被几个任务共享的变量
答:
int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 答:假定x=9999,答案是8。 10011100001110 当他们执行&运算并赋值给x,结果x为 10011100001110 此时x-1为 10011100001101 当他们执行&运算并赋值给x,结果x为 10011100001100 如此类推到结果为00000000000000,应该发现x = x&(x-1)就是将x最右边的二进制位1变为0。x为9999时二进制为1的位有8个,所以结果为8
答: 1、指针和数组都可以在初始化的时候赋予字符串常量。尽管看上去一样,底层机制却不同。 指针在定义的时候,编译器并不会为指针所指向的对象分配内存空间,它只是分配指针变量的空间。除非以一个字符串常量对其进行初始化。下面的定义创建了一个字符串常量(为其分配了内存空间) char *p = "abcd"; 在ANSI C中,初始化指针时所指向的字符串被定义为只读,如果想通过指针修改字符串的时候,会产生未定义的行为。 数组也可以用字符串常量进行初始化,但是其内容可以被修改。
不能对数组进行字节复制和比较,对于两个数组a,b,不能用b=a进行复制,而应当使用标准库函数strcpy()。也不能使用if(b==a)进行比较,应当使用strcmp()。 而对于指针p,如果要想将数组a中的内容复制,要先申请一块内存区域,然后使用strcpy()进行拷贝。
3、计算内存容量 用运算符sizeof()可以计算出数组的容量(字节数)。而指针sizeof()的结果为4 注意当数组名作为函数参数进行传递时,该数组自动退化该类型的指针 7、移位操作为何最好使用无符号数? 答:
答: 局部静态变量:局限于特定函数,但出作用域并不释放,在函数体内的静态变量的值也能够维持 静态函数:作用范围仅限于它的源文件,即只有本文件内才能够调用,函数名在其他文件不可见 存放位置:程序开始时,存放在全局数据区,结束时释放空间,默认初始化值是0,使用时可改变其值 9、#include<file.h>与#include“file.h”的区别? 答: #include“file.h” 是用于你自定义的头文件,编译器从用户的工作路径开始搜索file.h。
const int *a; int const *a; int *const a; int const *const a; int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。 int const * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。 |
C语言简答题含有部分我们阶段测试的题目(一)
最新推荐文章于 2020-04-11 10:55:19 发布