【C语言面试题】计算机专业必备,收藏的人已成功上岸!

150 阅读4分钟

毕业即失业,不知道现在还流行这句话不,反正我们当时毕业的时候,流行这句话,也让人很慌。

言归正传,毕业季,为大家分享一些关于C语言的面试题。

1 用变量 a 给出下面的定义

a.一个有10个指针的数组,该指针是指向一个整型数的;

b.一个指向有10个整型数数组的指针;

c.一个指向函数的指针,该函数有一个整型参数并返回一个整型数;

d.一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;

答案:

int*a[10];

int(*a)[10]

int(*a)(int);

int(*a[10])(int);

2 写一段代码计算结构体、联合、位段、内存大小

答案:

struct A

{

inta;

charb;

floatc;

struct Ad;

doublee;

};

sizeof(A)

3 代码改错

下面代码涉及到动态内存开辟,请改正下面错误代码:

wap( int* p1,int*p2 )

{

int* p;

*p =*p1;

*p1 =*p2;

*p2 = *p;

}

答案:p 为野指针(指向一个已删除的对象或未申请访问受限内存区域的指针)

void swap(int *pa, int *pb)

{

inttmp;

tmp = *pa;

*pa = *pb;

*pb = tmp;

}

4 数组和链表的区别?

数组:数据顺序存储,固定大小;

链表:数据可以随机存储,大小可动态改变;

5 要对绝对地址0x100000赋值

要对绝对地址0x100000赋值,我们可以用:

(unsignedint*)0x100000 =1234;

那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做?

答案:

*((void(*)( ))0x100000)();

(void (*)())0x100000//首先要将0x100000强制转换成函数指针

*((void (*)())0x100000)(); //然后再调用它:

6 const 有什么用途?

答案:

1.可以定义 const 常量;

2.const 可以修饰函数的参数、返回值,甚至函数的定义体。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

7 (void *)ptr 和(*(void**))ptr 的结果是否相同?

其中ptr为同一个指针。

答案:

他们的值相同。

8用#define声明一个常数,表明1年中有多少秒(忽略闰年问题)?

答案:

#defineSECONDS_PER_YEAR(60*60*24*365)UL

要点:

A.没有以分号结束;

B.懂得预处理器将为你计算常数表达式的值。即60 * 60 * 24 * 365而不是31536000.

C.考虑到了16位机将会溢出,巧妙运用了UL。

9写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个?

答案:

#define MIN(A,B) ((A) <= (B) ? (A) : (B))

要点:

A.参数用括号括起来;

B.考察能否合理运用条件运算符;

10Heap与Stack的差别?

答案: Heap是堆,Stack是栈。

Stack的空间由系统自动分配/释放,Heap上的空间手动分配/释放。

Stack空间有限,Heap是很大的自由存储区,malloc函数分配的内存空间即在堆上。

网上经典例子:

inta =0;//全局初始化区

char*p1;//全局未初始化区

voidmain(void)

{

intb;//栈

chars[] ="abc";//栈

char*p2;//栈

char*p3 ="123456";//123456\0在常量区,p3在栈上

staticintc =0;//全局(静态)初始化区

p1 = (char*)malloc(10);//堆

p2 = (char*)malloc(20);//堆

}

11下面的声明都是什么意思?

代码:

constinta;

intconsta;

constint*a;

int*consta;

intconst* aconst;

答案:

A.前两个的作用是一样,a是一个常整型数;

B.第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以);

C.第四个意思a是一个指向整型 数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的);

D.最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的)。

12sizeof和strlen的区别?

答案: sizeof是运算符,在编译时即计算好了;而strlen是函数,要在运行时才能计算。

------------ END ------------

另外,对现在我们的大多数朋友来说还是学编程技术最重要!栽一棵树最好的时间是十年前,其次是现在。**对于准备学习编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)**不妨从现在开始!

C语言C++编程学习交流圈子,**QQ群【981108780】**微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!