C语言面试基础题,程序员必备面试题~

75 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情

数据类型和函数

1、bool,int,float,指针类型的变量a 与0如何比较?

(1)bool :   if ( !a ) or if(a)
(2)int :   if ( a == 0)
(3)float :  const EXPRESSION EXP = 0.000001
if ( a < EXP && a >-EXP)
(4)pointer : if ( a != NULL) or if(a == NULL)

2、函数参数入栈顺序

C语言函数参数入栈顺序是从右向左的,这是由编译器决定的,更具体的说是函数调用约定决定了参数的入栈顺序。C语言采用是函数调用约定是__cdecl的,所以对于函数的声明,完整的形式是:int __cdecl func(int a, int b);

3、什么函数不能声明为虚函数?

Constructor

数组与指针

1、“引用”与指针的区别?

(1)引用必须被初始化,指针不必。

(2)引用初始化以后不能被改变,指针可以改变所指的对象。

(3)不存在指向空值的引用,但是存在指向空值的指针。

(4)指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

(5)流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

2、数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

(1)修改内容上的差别

      char a[] = “hello”;

      a[0] = ‘X’;

      char *p = “world”; // 注意p 指向常量字符串

      p[0] = ‘X’; // 编译器不能发现该错误,运行时错误

(2)用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。

//计算数组和指针的内存容量

     char a[] = "hello world";

     char *p = a;

     cout<< sizeof(a) << endl; // 12 字节

     cout<< sizeof(p) << endl; // 4 字节

注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

     void Func(char a[100])

     {

      cout<< sizeof(a) << endl; // 4 字节而不是100 字节

     }