文档介绍:unsigned short a = -1
printf(“%x”,a)输出多少,为什么会有这样的输出。printf函数的运行机制。
FFFF,输出的是-1的补码,2字节长
关于printf的运行机制,感觉问的挺深的,当时没回答出来,就知道printf是采用_cdecl调用方式,参数从右到左依次进栈。系统是如何分析参数个数并获取每一个参数的机制不大清楚。
单链表逆序算法。
C语言内存分配。
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
程序代码区—存放函数体的二进制代码。
堆栈区别,如何使用堆内存。
栈内存由系统分配和释放,主要保存局部变量,函数的参数等,空间较小,使用速度快。
堆空间由程序员使用时动态分配,使用完毕后释放,可申请空间大。
在c语言中,使用malloc申请堆空间。
const char *p 和char *const p作用都是什么。
constchar *p:等同于char const *p,表示指针p所指向的内容不能被修改。
char * const p 表示指针p本身不能被修改。
char const *const p,两者都不能更改。
#define 和typedef的区别
如
#define int * INT_d
typedef int* INT_t;
INT_da,b;
INT_tc,d;
abcd的类型都是什么?
acd是整形指针,b是整形变量
#define add(a,b) a+b
#define mul(a,b)a*b
printf(“%d”,mul(add(2,3),4));输出什么?
14而不是20
考察sizeof的理解
char str[] = “hello word”;
char *p = str;
typedef struct S_Node
{
int a;
int b;
} S_NODE;
S_NODE s_Data;
S_NODE &as_Node = s_Node;
void foo(const char pStr[50],S_NODE *p_S)
sizeof(str) = 11
strlen(str)=10
sizeof(p) =4
sizeof (s_Data)=8
sizeof (as_Node)=8
sizeof(pStr) = 4
sizeof(p_S) =4
关于进程、线程该如何考察?
我参加的笔试面试主要考察以下几个部分:
一、进程与线程有什么不同,为什么需要使用多线程。
,提高应用程序响应
,如C/S架构的服务器端并发线程响应用户的请求。