搜罗的面试题总结(一)

直奔主题:

1. 引用与指针的区别

引用是变量的别名,在使用上与原变量完全一样。

1>引用使用时要求:

①引用在创建时必须初始化           ——指针可以在任何时候初始化

②引用一旦创建就不能再更改引用关系 ——指针还可以指向其他对象

③引用不能为NULL

2>指针需要单独分配空间,引用不会单独分配空间。具体:

char *p = (char *)malloc(100);

int ip[10];

sizeof(指针)   32位系统是4字节

sizeof(ip)                40

sizeof()作用:是C/C++的一个操作符,返回一个对象或类型所占内存字节数。

3>作为函数参数时:

Void func(int &a);  void func(int *a);

都可以对a所指向或a的引用对象进行更改,区别在于:

&a 完全没有复制过程,直接在指向对象上面操作

*a需要将对象的指针复制

2. 自己实现strcpy()

#include <stdio.h>
#include <assert.h>


char *my_strcpy(char *dest, const char *src)
{assert((dest != NULL) && (src  != NULL));


int i;
for (i = 0; src[i] != '\0'; i++)
{
    dest[i] = src[i];
}
dest[i] = '\0';
return dest;
}

注意:

int a[]={1,12,23};

int *p=a;printf("%d\n",*p++); 

输出 a[0]的值 1,后加加:表达式里先用原值,不自增。

3. new、delete、malloc、free联系与区别

相同点:都可以用于动态申请内存和释放内存。

不同点:

malloc/free 是C/C++的标准库函数, new/delete是C++运算符

new可以自动分配空间大小, malloc需要手动指出分配字节的大小。

malloc 返回的是void *类型,所以需要手动指出类型

new 是类型安全的, malloc 不是

int* p = new float[2]; // 编译时指出错误        类型不匹配        int* p = malloc(2*sizeof(float)); // 编译时无法指出错误  强制转换类型

Obj *objects = new Obj[100];  //不能写成有参构造   Obj *objects =          new Obj[100](1);   ×

Delete []objects ;

4. 某32位系统下,默认4字节对齐,使用sizeof()进行计算:

char str[] = “12345”;

char *p = str;

int n = 10;

5. 求函数返回值, 输入x = 107 和 x = 1571, 并说明返回值含义

int func(int x)

{

    int count = 0;

    while(x)

    {

        count++;

        x = x & (x-1);

    }

    return count;

}

将x转为二进制,查看1的个数。

6. sizeof 与 strlen的区别

sizeof是C/C++中的运算符,作用是返回对象或类型在内存中所占字节数。

strlen是C语言中的库函数,用来计算字符串长度,直到空结束字符,但不包括空结束字符。

所在头文件为#include <string.h>其函数原型为unsigned int strlen(char *s); 其 中s为指定的字符串。

7. 在C++程序中调用被C编译器编译后的函数,为什么要加 extern “C” ?

告诉编译器该部分语法按照C语言语法编译

8. 一个类有基类、内部有一个其他类的成员对象,请问该子类、基类、和内部类的成员对象的构造函数执行顺序?

先调用基类构造函数、再调用其他类成员构造函数、最后调用自己类的构造函数。

先构造、后析构。

9. 写一个标准宏,该宏输入两个参数,并返回较小的一个。

10. 一个由C/C++编译程序占用内存分为以下几个部分

1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值

   等。其操作方式类似于数据结构中栈。

2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表。

3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一块区域。- 程序结束后由系统释放。–>分别是data区,bbs区

4、文字常量区 —常量字符串就是放在这里。程序结束后由系统释放–>coment区

5、程序代码区—存放函数体二进制代码。–>code区

深度探索C++对象模型:   sizeof(空类)  为何是1  ?

那是被编译器插进去的一个char ,使得这个class的不问同实体(答object)在内存中配置独一无二的内地址。容也就是说这个char是用来标识类的不同对象的

猜你喜欢

转载自blog.csdn.net/ACK_ACK/article/details/105424304
今日推荐